Linux管道,fork和execlp:如何将值写入流1中

时间:2014-05-01 23:53:11

标签: c++ c linux fork pipe

我使用函数(L)通过execlp()执行另一个程序(K)。 在K程序中,结果写入流1:

write(1, (char *)&o, sizeof(int));

由于在execlp()之后,L的剩余部分不会被执行,我怎样才能将结果写在流1中?

不要问我为什么需要这样做。这是项目的要求。

我跟随你们的建议,但现在的问题是,K程序获取参数的方式来自流(一个标准流,另一个流),我使用管道将参数写入相应的流(由父母完成。

在子exec之后,在父部分中,我从流0读取(K程序将其结果写回流1中)。但我能得到的是父母写入流中的内容,而不是K程序写回的内容。 怎么了?我需要添加另一个管道吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

Jonathan Leffler在评论中提到的关键见解是,在致电fork之前,您需要L正在运行execlp()的程序。

在fork之后,父级继续执行L的其余部分,并且子级通过调用K变为程序execlp(),除非出现错误,否则永远不会返回

因此,“L的剩余部分将不会被执行”的断言是不正确的。如果正确编写函数L在父进程中执行。

更新:由于OP提出了更具体的问题,我接着回答这个问题。

如果要检索子进程写入stdout(fd 1)的内容,则需要在fork之前创建一个新管道,并将此管道的写入端复制到子项{{1}中}。

以下是一个示例程序,稍稍修改了pipe man page

stdout