我遇到了关于重定向多进程标准输出的问题。
假设我有进程 A,我在 A 中使用 fork(),然后得到进程 A 和 B。我在 B 中使用 fork(),最后得到进程 A、B 和 C。B 和 C 都通过执行()。
现在,我尝试使用两个管道将 A 和 B 的标准输出重定向到 C 的标准输入。
#include<unistd.h>
#include<stdio.h>
#include<sty/types.h>
int main()
{
int AtoC [2];
pipe(AtoC);
int fd1,fd2;
fd1=fork();
if(fd1>0)
{
/***In process A, I do the following steps: ***/
close(AtoC[0]);
dup2(AtoC[1], STDOUT_FILENO);
/* program running in process A */
}
else
{
int BtoC [2];
pipe(BtoC);
fd2=fork();
if(fd2>0)
{
/***In process B, I do the following steps: ***/
close(AtoC[1]);
close(BtoC[0]);
dup2(BtoC[1], STDOUT_FILENO);
/*** execute another program in process B using execl(); ***/
}
else
{
/*** In process C, I do the following steps: ***/
close(AtoC[1]);
close(BtoC[1]);
dup2(AtoC[0],STDIN_FILENO);
dup2(BtoC[0],STDIN_FILENO);
/*** execute another different program in process C using execl(); ***/
}
}
}
现在,在这两个语句之后:
dup2(AtoC[0],STDIN_FILENO);
dup2(BtoC[0],STDIN_FILENO);
进程C的stdin最终重定向到BtoC[0]
进程B的stdout。进程A的stdout没有传递到进程C的stdin。
我的问题是是否有任何解决方案可以让我同时将进程 A 和 B 的标准输出重定向到进程 C 的标准输入。
另一个问题是,如果我还想在屏幕上打印进程 A 的标准输出,我该怎么办?我知道tee
命令行中的命令。我尝试tee(int fd_in, int fd_out, size_t len, unsigned int flags)
在进程A中使用相应的函数,但是我没有打印出进程A的任何stdout。
任何建议表示赞赏,谢谢。