我的问题与上面的一个有关。在第一个/已接受的答复中,我们正在做:
// 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,看看输出是否可用。但到现在为止,我只需要看1FD,现在我必须看2。
注意事项:一个管道只能有两个末端,对吗?一个要写,另一个要读。我怎样才能容纳这第三端:D?
发布于 2011-08-11 17:52:05
您需要创建两个独立的管道,并分别从它们中读取。应该不难,因为您已经准备好了select()。
https://stackoverflow.com/questions/7030485
复制相似问题