Перенаправить stdout и stderr в сокет для программы распределенной оболочки - PullRequest
5 голосов
/ 10 ноября 2011

Я сделал программу с распределенной оболочкой, которая имеет клиент и сервер. Клиент отправляет запрос команды на сервер, и сервер выполняет эту команду локально и должен выводить результаты этой команды клиенту. У меня проблемы с выяснением, как перенаправить stdout / stderr к клиенту. Я использую execvp для выполнения команды.

Думаю, мне придется использовать dup2? Но я не могу понять, как правильно его использовать. Любая помощь?

1 Ответ

7 голосов
/ 10 ноября 2011

Вам просто нужно использовать dup2() для дублирования файлового дескриптора сокета на файловые дескрипторы stderr и stdout. Это почти то же самое, что перенаправление на каналы.

cpid = fork();
if (cpid == 0) {
  dup2(sockfd, STDOUT_FILENO);
  dup2(sockfd, STDERR_FILENO);
  execvp(...);
  /*... etc. etc. */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...