假设我们有一个管道,父母正在写它,而孩子正在从管道中读取。 我们知道父母应该在写作之前关闭阅读结束,孩子应该在阅读之前关闭写作结束。 但我想知道: 父母完成写作后是否必须关闭写作结束?同样,孩子需要在完成阅读后关闭阅读结束? 如果是强制性的,为什么呢?
答案 0 :(得分:3)
这不是强制性的,但您可能希望这样做,尤其是在管道的 write-end 上。
管道端文件描述符是对其后面的管道端实体的计数引用。当您dup
管道端文件描述符或当您使用打开的管道端分叉流程时,对同一管道端的新引用创建实体并且引用计数增加(并且每个close
减少它)。
关闭写作结束以在另一端变为 EOF (通常需要或消费者(阅读结束) )不知道何时停止阅读),写作结束文件描述符需要是写作结束实体的最后一次引用 - 只考虑管道的写入结束如果关闭写作结束实体的所有引用(文件描述符),则关闭。
(此行为适用于所有文件描述符,并不限于管道端文件描述符。)