为什么使用pipe()创建的管道不能用作双向管道?

时间:2012-04-13 13:24:39

标签: c ipc pipe interprocess

几乎所有pipe示例我都看到过关闭未使用的写/读结束的建议。同样,男人明确指出pipe() creates a pipe, a unidirectional data channel但是我已经尝试在父母和孩子的管道的两端读写,一切似乎都没问题。

所以我怀疑为什么我们需要2个管道,如果两个进程必须相互读写,为什么不使用单个管道?

2 个答案:

答案 0 :(得分:8)

如果您使用相同的管道,孩子如何将其消息与父母消息分开,反之亦然?

例如:

Parent writes to pipe
Parent reads from pipe hoping to get message from child but gets its own message :(

对于child-> parent使用一个管道,为parent-> child使用另一个管道要容易得多。

即使您有一些读/写协议,也很容易使父子进程死锁。

答案 1 :(得分:5)

可以 在创建的管道的两端进行读写,但是单向意味着数据只能在任何时间沿着一个方向传播,从父母到孩子,反之亦然。非阻塞发送和接收数据需要两个管道,这意味着您可以使用两个管道同时读取和写入,但是使用一个管道,您必须先完成读取才能写入管道或者必须完成写入某些内容在你能读取管道之前。 通俗地说,您只能在任何时间只用一根烟斗读取或写入