区分管道上的标准输出和标准错误

问题描述 投票:0回答:1

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 fd,现在我必须看 2。

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

c pipe posix-select
1个回答
3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.