Здравствуйте, 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++, можете навернуть абстракций над всем этим или какой-нибудь, прости господи, буст заюзать. Там наверное всё это под капотом спрятано. Но вообще это делается вот так.