Re: Выполнить приложение. Параметры в поток ввода, результат
От: vsb Казахстан  
Дата: 22.07.15 12:36
Оценка: 12 (1) +1
Здравствуйте, dosik, Вы писали:

D>Добрый день.


D>Осваиваюсь в *nix (ранее писал только под Windows) системах.

D>Возникла следующая задача: необходимо выполнить из своей программы внешнюю программу таким образом, чтобы в ее поток ввода передать ей некие значения, а результат ее работы получить из ее потока вывода и отобразить результаты внутри своей программы.
D>С начала смотрел в сторону exec*, но там немного не то.
D>Язык — С++.
D>Заранее благодарен.

1. Создаёте два (или три, если нужен stderr) пайпа вызовом pipe().

2. Делаете вызов fork();

3. В дочерней программе делаете dup2(stdinpipe[0], 0), т.е. стандартный ввод заменяете этим пайпом. То же самое делаете со стандартным выводом (1), если нужно — со стандартным выводом ошибок. Закрываете все дескрипторы pipe. Не перепутайте порядок дескрипторов, с stdin ваша программа будет читать, в stdout писать.

4. В дочерней программе делаете exec в нужную вам программу.

5. В родительской программе закрываете те дескрипторы pipe, которые используются дочерней программой.

В принципе всё. В родительской программе пишете в оставшиеся дескрипторы, читаете из них и тд.

Главное вдумчиво почитать man-ы по всем используемым функциям. Ничего сложного, на самом деле.

Раз у вас C++, можете навернуть абстракций над всем этим или какой-нибудь, прости господи, буст заюзать. Там наверное всё это под капотом спрятано. Но вообще это делается вот так.
Отредактировано 22.07.2015 12:37 vsb . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.