Не могли бы вы сказать мне лучший способ сделать это?Я могу использовать popen, но каждый раз, когда мне нужно запустить приложение, необходимо создавать большой буфер для аргументов.
popen()
- это один хороший стандартный способ, если вам нужен только один способ связи сдочернее приложение, например запись в stdin
или чтение из stdout
, но не в оба.
При использовании C нужно быть уверенным в строках.Очень полезно использовать библиотеку строк для C для упрощения строковых операций, таких как конкатенация строк в вашем случае, потому что стандартная библиотека C предоставляет для этого только основные низкоуровневые функции.
Я могу использовать fork + execv, но затем программа пишет в стандартный вывод, и я не могу прочитать вывод (чтобы отобразить его в текстовом поле)
popen()
дает вам FILE*
указатель на stdout
дочерней программы, из которого вы можете прочитать ее вывод, используя стандартную функцию CI / O fread()
или fscanf()
.Опять же, стандартная библиотека C имеет эту функцию , и с ней стоит ознакомиться.
Есть ли какое-либо другое решение?
Вы можетеСделайте так, чтобы дочерняя программа записывала файл, а затем читала этот файл, но в любом случае вам нужно иметь возможность создать строку командной строки и прочитать файл.