c - 如果我们不关闭管道 : Linux/C 中使用过的一端会发生什么

标签 c linux pipe fork

假设我们有一个管道,父级正在其上写入,子级正在从管道中读取。 我们知道,父级应该在写入之前关闭读取端,子级应该在读取之前关闭写入端。 但我想知道: 家长写完后是否强制关闭写端?同样, child 读完后需要关闭阅读端吗? 如果是强制性的,为什么要这样做?

最佳答案

这不是强制性的,但您可能想要这样做,尤其是在管道的写入端

管道端文件描述符是对它们后面的管道端实体的引用。当您复制管道端文件描述符时,或者当您使用开放的管道端派生进程时,对同一的新引用管端实体被创建,引用计数增加(并且每次关闭减少它)。

用于将写入端的结束转变为另一端的EOF(通常是可取的,否则消费者(读取端 )不知道何时停止读取),写入结束文件描述符需要是对写入结束实体的最后一个引用——仅考虑管道的写入结束如果对该写入结束实体的所有引用(文件描述符)都关闭,则关闭。

(此行为适用于所有文件描述符,并且不限于管道端文件描述符。)

关于c - 如果我们不关闭管道 : Linux/C 中使用过的一端会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33626192/

相关文章:

C 管道标准输出到 fork

events - Angular 2 - 在(点击)事件中使用管道

c++ - 模仿unix shell管道

c - 如何编写返回可变长度字符串的 C 函数?

c - PF4 的中断配置?

c - 在 UIViewController 中添加 View 时出现空白

c - 如何在 OS161 中添加 open 系统调用的两个变体?

c++ - 如何获取 recvmsg 的 msg_control 缓冲区的大小?

检查 pthread_mutex 是否初始化

c++ - 什么是 libstdc++-libc 以及何时需要它