为什么使用pipe()创建的管道不能用作双向管道?
几乎所有pipe
示例我看到关闭未使用的写入/读取结束的建议。也有人明确指出,pipe() creates a pipe, a unidirectional data channel
但我已经尝试读和写在父母和孩子的管道两端,一切似乎都没问题。为什么使用pipe()创建的管道不能用作双向管道?
所以我的疑问是,为什么我们需要2管道,如果两个进程必须读取和写入对方,为什么不使用单个管道呢?
如果使用相同的管道如何孩子从父母信息中分离出来的消息,反之亦然写?
例如:
Parent writes to pipe
Parent reads from pipe hoping to get message from child but gets its own message :(
这是很容易使用的儿童安全>家长一个管和父 - >儿童的另一个管道。
即使您有一些读/写协议,也很容易使父进程和子进程死锁。
这个质量保证应该是在介绍什么管道时的背景...... – n611x007 2013-09-16 10:22:23
您可以读和写在所创建的管的两端,但单向意味着只有数据随时在一个方向上行进,从父到子,或反之亦然。需要两个管道来实现非阻塞的数据发送和接收,这意味着您可以同时读取和写入两个管道,但是只有一个管道必须先完成读取,然后才能写入管道,或者您必须完成一些写操作然后才能阅读管道。 在通俗地说,你只能读取或在任何时间点只有一个管
谢谢!这里是新的,不确定格式 – 2012-04-13 13:51:45
因为首先实现pipe()的人使它成为单向的,这成为后续实现的标准。 (请注意,在某些操作系统的管道()上会给你一个双向流,而另一些则不会)。如果需要双向通信,只需使用2个管道或使用socketpair()。 – nos 2012-04-13 13:35:26
首先实现管道()的家伙只配备了一个缓冲管道,类似于流体/气体输送的真实管道。对于双缓冲区,请参阅套接字。 – 2012-04-13 13:50:56
Solaris管道是双向的。并不是很多人都在使用Solaris,只是把它扔到那里。但是,正如其他人已经明确表示的那样,如果你想要可移植性,你就不应该假设这种能力。 – FatalError 2012-04-13 13:53:46