linux 重定向 进程阻塞,c - 将两个进程的stdout重定向到Linux C中另一个进程的stdin - 堆栈内存溢出...

我遇到有关多进程重定向标准输出的问题。

假设我有进程A,我在A中使用fork(),然后得到进程A和B。然后我在B中使用fork(),最后得到进程A,B和C。B和C都通过以下方式实现其他程序exec()。

现在,我尝试通过两个管道将A和B的标准输出重定向到C的标准输入。

#include

#include

#include

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的标准输入重定向到BtoC[0] ,它是进程B的标准输出。并且进程A的标准输出不传递到进程C的标准输入中。

我的问题是,是否有任何解决方案可以让我同时将进程A和B的标准输出重定向到进程C的标准输入。

另一个问题是,如果我也想在屏幕上打印进程A的标准输出,该怎么办? 我知道命令行中的命令tee 。 我尝试在进程A中使用相应的函数tee(int fd_in, int fd_out, size_t len, unsigned int flags) ,但我无法打印进程A的任何stdout。

任何建议表示赞赏,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值