2011-08-11 100 views
2

popen() alternative从标准错误标准输出上区分开管

我的问题是有关一个张贴以上。在第一/响应接受,我们正在做的:

// 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); 

但我要的是从正规OUTPUT区分ERROR。我怎样才能做到这一点?当我在STDERR中获得任何东西时,我需要对它做出反应。

它没有多大意义,但是,我可以做以下?:

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

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

我使用select看FD,看看输出是否可用。但到现在为止,我只需要看1fd,现在我必须看看2.

注意:管道只能有2个端点,对吗?一个写信给其他人阅读。我怎样才能容纳这第三端:D?

回答

3

您需要创建两个独立的管道并分别读取每个管道。不应该很难,因为你已经有了select()。

+0

谢谢!有点有道理。感谢你的帮助。 – hari

+1

工作得很好!当我现在考虑这个问题时,这个问题本身有点“跛脚”,但我想我很笨,所以它允许:D!非常感激。 – hari

相关问题