c - 区分管道上的 stdout 和 stderr

标签 c select pipe

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 中收到任何内容时,我需要对其使用react。

这没有多大意义,但是我可以执行以下操作吗?:

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

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

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

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

最佳答案

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

关于c - 区分管道上的 stdout 和 stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7030485/

相关文章:

c - 读(...): Will read remember the change?

c - fork了10个子进程,父进程如何收集它们的返回值?

c - Linux 操作系统 - 来自父进程、子进程、父进程的输入输出管道

css - chrome 中选择选项元素中的额外填充

纯 C 中的并发编程 - Windows/Linux

mysql - 如何从另一个表中的字段获取计数 - MySQL

c - 如果我有一个整数值大于 1024 的文件描述符,select() 仍然可以处理它吗?

python - 如何区分文件和输出流 "on-the-fly"?

c - While循环段错误

c++ - 移动 strchr 指针后使用 strtok