Linux 管道示例。 IPC管道创建
Posted
技术标签:
【中文标题】Linux 管道示例。 IPC管道创建【英文标题】:Linux pipe example . ipc pipe creation 【发布时间】:2015-08-11 08:44:04 【问题描述】:我正在查看 linux 中的 pipe(2)
系统调用示例,我从 tldp 得到这个:http://tldp.org/LDP/lpg/node11.html#SECTION00722000000000000000
当我们需要关闭子进程的输入时,我们关闭子进程的 fd(1) - 很好,但我们也应该关闭父进程的输出,即关闭父进程的 fd(0),为什么我们要在这里使用 else 语句,在这种情况下,父母的 fd(0) 只会在 fork 失败时关闭,我正确吗?
我觉得不应该有else
声明,孩子的输入和父母的输出都应该关闭,以便孩子与父母沟通对吗?
【问题讨论】:
【参考方案1】:你不应该谈论子输入和父输出,看起来你指的是stdin
和stdout
,这与管道的读写通道不一定相同。
子级与父级之间的通信,子级需要关闭管道的读取通道(在您的示例中为fd[0]
),父级需要关闭管道的写入通道(fd[1]
)。
您的困惑似乎更多是关于分叉而不是管道。
else
是必需的,因为我们需要在父进程和子进程中执行不同的代码。在 fork 之后使用if
/ else
来区分每个进程中执行的代码是很常见的。请记住,fork(2)
会返回两次:在父母和新生儿中。它在父进程中返回子进程的 pid,在子进程中返回 0,因此我们使用它来区分它们。
在您发布的示例中,如果fork(2)
失败,则输入第一个if
并退出进程。否则,使用一对if
/else
在每个进程中执行不同的代码。
【讨论】:
以上是关于Linux 管道示例。 IPC管道创建的主要内容,如果未能解决你的问题,请参考以下文章