我正在阅读UNIX中用于两个进程之间进程间通信的管道。我有以下问题。
1)Unix管道是否仅限于2个进程之间使用,还是我们可以使用3个或更多相关进程使用单个管道进行通信?例如,如果我有一个父母& 2个子进程,我可以使用管道从父进程写入,并且可以使用来自两个子进程的相同管道进行读取吗?如果是这样的话,两个孩子将如何得到相同的内容,因为 如果一个孩子从管道读取,数据将被内核从管道中删除?
2)是否真的有必要关闭管道未使用的一端?例如,如果我的父进程正在将数据写入管道并且子进程正在从管道读取,是否真的有必要在父进程中关闭管道的读取端并从子进程关闭写入结束?如果我不关闭这些目的,是否有任何副作用?为什么我们需要关闭这些目标?
答案 0 :(得分:1)
单个管道不是允许父级广播给其子级的自然解决方案。共享内存将提供一种更自然的方法来解决该问题。只有一条消息自然地从父节点广播到子节点:父节点可以close
管道的写端,并使所有子节点在读取端看到read
返回0管道。
但是,儿童可以使用单个管道将信息转发回父母。只要消息与来自子节点的源信息正确构成,父节点就可以从管道的读取端对来自其所有子节点的响应进行字段响应,而每个子节点都写入管道的写入端。