linux建立两个子进程,是否可以在由同一父级(LINUX,POSIX)创建的两个子进程之间建立管道...

小编典典

本质上,这就是外壳程序构建重定向链的方式,即类似

ls | grep foo | sort | uniq

在Unix编程上有一些很棒的介绍性文本,其中通过本书实现了一个简单的shell。Shell的任务之一是重定向。其中一本书是Michael K.

Johnson和Erik W. Troan撰写的“ Linux Application Programming”。

要为N个进程构建重定向链,您需要N-1个管道。对于每个重定向,请使用pipe(int

fds[2])系统调用创建管道。在使用之后fork(),但在execv使用之前dup2(int from, int

to),将管道的一端“连接”到每个过程的标准输入(0)或标准输出。这是一个过于简化的代码,没有错误检查:

int pipe_A[2];

int pipe_B[2];

pipe(pipe_A);

pipe(pipe_B);

pid_t pid_A, pid_B, pid_C;

if( !(pid_A = fork()) ) {

dup2(pipe_A[1], 1); /* redirect standard output to pipe_A write end */

execv(...);

}

if( !(pid_B = fork()) ) {

dup2(pipe_A[0], 0); /* redirect standard input to pipe_A read end */

dup2(pipe_B[1], 1); /* redirect standard output to pipe_B write end */

execv(...);

}

if( !(pid_C = fork()) ) {

dup2(pipe_B[0], 0); /* redirect standard input to pipe_B read end */

execv(...);

}

请注意,如果将管道的数组索引用于stdio重定向,则选择它们的方式应反映标准的输入/输出文件描述符。这个选择不是任意的。

当然,您可以将管道连接到任何文件描述符(例如,有些应用程序期望它们的父级打开,例如连接到管道的fd

3和4),并且大多数shell也直接支持此操作(例如1>&3将重定向)进入fd 3)。但是,数组的索引pipe(int

fds[2])当然是0和1。我之所以这样说,是因为我有一些对货物狂热编程的学生,他们盲目地将目标fds也用于管道syscall数组。

waitpid(-1, NULL,

0)等待所有子进程完成使用–我认为这是我的预答器-1的意思,这意味着:等待所有子进程完成。另一个选择是wait()在循环中调用,该循环将返回刚终止的孩子的pid。如果再次调用它,并且仍然有一个孩子在奔跑,它将再次阻塞。如果没有孩子,则返回-1;否则,返回-1。我更喜欢waitpid解决方案。

2020-06-02

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值