Linux管道示例。 ipc管道创建

时间:2015-08-11 08:44:04

标签: linux pipe ipc

我正在浏览linux中的pipe(2)系统调用示例,我是从tldp得到的:http://tldp.org/LDP/lpg/node11.html#SECTION00722000000000000000

当我们需要关闭子进程的输入时我们关闭子进程的fd(1) - 但是我们也应该关闭父进程的输出,即关闭父进程的fd(0),为什么要在这里使用else语句,在这种情况下,父级的fd(0)将仅在fork失败时关闭,我是否正确?

我觉得不应该有else陈述,父母的输入和父母的输出都应该关闭,以便从孩子到父母的沟通正确吗?

1 个答案:

答案 0 :(得分:0)

你不应该谈论孩子输入和父输出,看起来你指的是stdinstdout,这不一定与管道阅读相同并写信道。

对于从子级到父级的通信,子级需要关闭管道的读取通道(示例中为fd[0]),父级需要关闭管道的写入通道({ {1}})。

你的困惑似乎更多的是关于分叉而不是关于管道。

需要fd[1],因为我们需要在父级和子级中执行不同的代码。在分叉后,使用else / if来区分每个进程中执行的代码是很常见的。请记住,else返回两次:在父母和新生儿中。它返回父节点中子节点的pid,子节点返回0,所以我们用它来区分它们。

在您发布的示例中,如果fork(2)失败,则会输入第一个fork(2)并退出流程。否则,一对if / if用于在每个进程中执行不同的代码。