【发布时间】:2012-04-25 20:49:26
【问题描述】:
我看到的几乎所有pipe 示例都建议关闭未使用的写入/读取结束。还有人明确指出pipe() creates a pipe, a unidirectional data channel 但我已经尝试在父母和孩子的管道两端进行读写,一切似乎都很好。
所以我的疑问是,如果两个进程必须相互读写,为什么我们需要 2 个管道,为什么不使用单个管道呢?
【问题讨论】:
-
因为最先实现 pipe() 的人把它做成了单向的,然后成为了后续实现的标准。 (请注意,在某些操作系统的 pipe() 上确实为您提供了双向流,而另一些则没有)。如果需要双向通信,只需使用 2 个管道或使用 socketpair()。
-
首先实现 pipe() 的人只为管道配备了一个缓冲区,类似于现实世界中用于流体/气体输送的管道。对于双缓冲区,请参阅套接字。
-
Solaris 的管道是双向的。并不是说很多人都在使用 Solaris……只是把它扔在那里。但是,正如其他人已经明确指出的那样,如果你想要可移植性,你不应该假设这种能力。
标签: c ipc pipe interprocess