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】:

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

子级与父级之间的通信,子级需要关闭管道的读取通道(在您的示例中为fd[0]),父级需要关闭管道的写入通道(fd[1])。

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

else 是必需的,因为我们需要在父进程和子进程中执行不同的代码。在 fork 之后使用if / else 来区分每个进程中执行的代码是很常见的。请记住,fork(2) 会返回两次:在父母和新生儿中。它在父进程中返回子进程的 pid,在子进程中返回 0,因此我们使用它来区分它们。

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

【讨论】:

以上是关于Linux 管道示例。 IPC管道创建的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp Linux下IPC通信之无名管道管示例

linux IPC总结——管道

c_cpp Linux下IPC通信之有名管道fifo示例

Linux(IPC)中的管道损坏

linux 进程间通信机制(IPC机制)- 管道

Linux IPC之管道和FIFO