2010-08-14 3 views
1

Я должен выполнить любую другую программу из моей программы на C, которая непрерывно дает сообщения (промежуточный результат) на stdout.Эти сообщения (промежуточный результат), которые я могу получить после завершения завершения его выполнения (другая программа завершена), но моя проблема заключается в том, что если выполнение команды exec происходит, то как получить эти сообщения (промежуточный результат) по очереди? Основываясь на этих промежуточных результатах, я должен предоставить некоторые входы также команде exec (указать ввод в другую программу), как это сделать?Как читать промежуточные результаты команды exec параллельно при выполнении команды exec в C?

ответ

3

См. pipe(2). Используйте дескриптор входного файла для stdin дочернего процесса, который вызывает exec.

Чтобы переместить дескриптор файла, сделать

dup2(my_pipe[0], stdin); 

у ребенка после развилки.

Или используйте popen(3), как предлагает Чао.

+0

Я сделал аналогичный путь (используемая труба для stdout), но в этом случае я могу читать из трубы только тогда, когда команда exec завершается (выполняется другое исполнение программы), но я не могу получить промежуточные результаты параллельно при выполнении команды exec выполнение происходит – joseph

+0

@joseph. Вам нужно «перекрутить» ваш процесс, чтобы родительский процесс мог отправлять и получать информацию в процесс 'exec''d. Или я вас не понимаю? – strager

+0

У меня есть fork мой процесс, в дочернем процессе сначала я использую pipe для дублирования stdout (dup2 (my_pipe [1], stdout);) then Я выполняю команду exec , а в родительском процессе я читаю промежуточный результат в цикле (используя команду чтения на my_pipe [0]), во время отладки я обнаружил, что чтение не дает никаких о/р до тех пор, пока exec не завершится (он блокируется при чтении команды, если exec еще не закончен), но мне нужен этот промежуточный результат параллельно (как только exec дает этот промежуточный результат) – joseph

4

popen(3) запустит программу, предоставив вам номер FILE*, который вы можете использовать для чтения вывода процесса.

Смежные вопросы