假设我们有一个管道,父级正在其上写入,子级正在从管道中读取。 我们知道,父级应该在写入之前关闭读取端,子级应该在读取之前关闭写入端。 但我想知道: 家长写完后是否强制关闭写端?同样, child 读完后需要关闭阅读端吗? 如果是强制性的,为什么要这样做?
最佳答案
这不是强制性的,但您可能想要这样做,尤其是在管道的写入端。
管道端文件描述符是对它们后面的管道端实体的引用。当您复制
管道端文件描述符时,或者当您使用开放的管道端派生进程时,对同一的新引用管端实体被创建,引用计数增加(并且每次关闭
减少它)。
用于将写入端的结束转变为另一端的EOF(通常是可取的,否则消费者(读取端 )不知道何时停止读取),写入结束文件描述符需要是对写入结束实体的最后一个引用——仅考虑管道的写入结束如果对该写入结束实体的所有引用(文件描述符)都关闭,则关闭。
(此行为适用于所有文件描述符,并且不限于管道端文件描述符。)
关于c - 如果我们不关闭管道 : Linux/C 中使用过的一端会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33626192/