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

如果我们不关闭管道中使用的端:Linux/C,会发生什么,c,linux,pipe,fork,C,Linux,Pipe,Fork,假设我们有一根管子,父母在上面写字,孩子在管子里读书。 我们知道,父母应该在写作前关闭阅读端,孩子应该在阅读前关闭写作端。 但我想知道: 家长完成书写后是否必须关闭书写端?同样,孩子在完成阅读后需要关闭阅读端吗? 如果它是强制性的,为什么呢?它不是强制性的,但您可能想这样做,尤其是在管道的写入端 管端文件描述符是对其后面的管端实体的计数引用。当您dupa管道端文件描述符或当您用一个打开的管道端分叉一个进程时,将创建对同一管道端实体的新引用,引用计数增加(并且每次关闭都会减少它) 关闭写入端以在另

假设我们有一根管子,父母在上面写字,孩子在管子里读书。 我们知道,父母应该在写作前关闭阅读端,孩子应该在阅读前关闭写作端。 但我想知道: 家长完成书写后是否必须关闭书写端?同样,孩子在完成阅读后需要关闭阅读端吗?
如果它是强制性的,为什么呢?

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

管端文件描述符是对其后面的管端实体的计数引用。当您
dup
a管道端文件描述符或当您用一个打开的管道端分叉一个进程时,将创建对同一管道端实体的新引用,引用计数增加(并且每次
关闭
都会减少它)

关闭写入端以在另一端变成EOF(通常需要,否则消费者(读取端)不知道何时停止读取),该写入结束文件描述符需要是对写入结束实体的最后一次引用-只有当对该写入结束实体的所有引用(文件描述符)都已关闭时,才认为管道的写入结束已关闭

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