【问题标题】:distinguish stdout from stderr on pipe区分管道上的 stdout 和 stderr
【发布时间】:2011-08-12 01:52:05
【问题描述】:

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

但我想要区分ERROR 和普通OUTPUT。我怎样才能做到这一点?当我在 STDERR 中得到任何东西时,我需要对其做出反应。

这没有多大意义,但是,我可以这样做吗?:

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

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

我正在使用select 查看 fd 并查看输出是否可用。但是到目前为止,我只需要看 1 fd,现在我必须看 2。

注意:管道只能有 2 个末端,对吗?一个用于写入,另一个用于读取。我怎样才能适应这个第三端:D ??

【问题讨论】:

    标签: c select pipe


    【解决方案1】:

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

    【讨论】:

    • 谢谢!有点道理。感谢您的帮助。
    • 效果很好!现在想起来,这个问题本身就有点lame,但我想我很愚蠢,所以它是允许的:D!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    相关资源
    最近更新 更多