4

pipe我见过的几乎所有示例都建议关闭未使用的写入/读取结束。男人也明确指出,pipe() creates a pipe, a unidirectional data channel但我已经尝试在父母和孩子的管道两端进行读写,一切似乎都很好。

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

4

2 回答 2

8

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

例如:

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

将一个管道用于子-> 父,将另一个管道用于父-> 子,这要容易得多。

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

于 2012-04-13T13:30:42.450 回答
5

可以在创建的管道的两端读取和写入,但单向意味着数据在任何时候都只能在一个方向上传输,从父级到子级,反之亦然。非阻塞发送和接收数据需要两个管道,这意味着您可以使用两个管道同时读取和写入,但是使用一个管道您必须先完成读取才能写入管道,否则您必须完成写入在您阅读管道之前。用外行的话来说,你只能在任何时间点用一个管道读取或写入

于 2012-04-13T13:29:55.683 回答