отличить стандартный вывод от стандартного на трубе - PullRequest
2 голосов
/ 11 августа 2011

popen () альтернатива

Мой вопрос связан с вопросом, размещенным выше. В первом / принятом ответе мы делаем:

// Child. Let's redirect its standard output to our pipe and replace process with tail
close(pipefd[0]);
dup2(pipefd[1], STDOUT_FILENO);
dup2(pipefd[1], STDERR_FILENO);

Но я хочу отличить ERROR от обычного OUTPUT. Как я могу это сделать? Когда я получаю что-то в STDERR, мне нужно реагировать на это.

Это не имеет особого смысла, но я могу сделать следующее?:

int pipefd[3]     /* instead of 2 */

dup2(pipefd[1], STDOUT_FILENO);
dup2(pipefd[2], STDERR_FILENO);

Я использую select, чтобы посмотреть на fd и посмотреть, доступен ли вывод. Но до сих пор мне просто нужно посмотреть на 1-е число, теперь мне нужно посмотреть на 2.

ПРИМЕЧАНИЕ : Труба может иметь только 2 конца, верно? один для записи и другой для чтения. Как я могу приспособить этот третий конец: D ??

1 Ответ

3 голосов
/ 11 августа 2011

Вам нужно создать две независимые трубы и читать по каждой из них по отдельности. Не должно быть сложно, так как у вас уже есть select () на месте.

...