Запуск консольного приложения из графического интерфейса пользователя - PullRequest
2 голосов
/ 04 сентября 2011

Не могли бы вы сказать мне лучший способ сделать это? Я могу использовать popen, но при каждом запуске приложения необходимо создавать большой буфер для аргументов. Я могу использовать fork + execv, но затем программа пишет в stdout, и я не могу прочитать вывод (чтобы отобразить его в текстовом поле). Есть ли другое решение?

1 Ответ

1 голос
/ 04 сентября 2011

Не могли бы вы сказать мне лучший способ сделать это?Я могу использовать popen, но каждый раз, когда мне нужно запустить приложение, необходимо создавать большой буфер для аргументов.

popen() - это один хороший стандартный способ, если вам нужен только один способ связи сдочернее приложение, например запись в stdin или чтение из stdout, но не в оба.

При использовании C нужно быть уверенным в строках.Очень полезно использовать библиотеку строк для C для упрощения строковых операций, таких как конкатенация строк в вашем случае, потому что стандартная библиотека C предоставляет для этого только основные низкоуровневые функции.

Я могу использовать fork + execv, но затем программа пишет в стандартный вывод, и я не могу прочитать вывод (чтобы отобразить его в текстовом поле)

popen() дает вам FILE* указатель на stdout дочерней программы, из которого вы можете прочитать ее вывод, используя стандартную функцию CI / O fread() или fscanf().Опять же, стандартная библиотека C имеет эту функцию , и с ней стоит ознакомиться.

Есть ли какое-либо другое решение?

Вы можетеСделайте так, чтобы дочерняя программа записывала файл, а затем читала этот файл, но в любом случае вам нужно иметь возможность создать строку командной строки и прочитать файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...