我有以下情况。
我创建了一个管道。
分叉了一个子进程。
子进程显式关闭管道的读取端并写入管道的写入端并退出而不关闭任何东西(我认为 exit 应该代表子进程关闭所有打开的文件/管道描述符)。
Parent显式关闭管道的写入端,并使用
fgets
untilfgets
返回 NULL从管道的读取端读取。即它完全读取。
现在我的问题是,为什么父级在完成读取后需要明确关闭管道的读取端?从读取端读取完整数据后,系统完全删除管道不是明智的吗?
我在父项中明确关闭了读取端,并且Too many file descriptors
在打开更多管道时迟早会出错。我的假设是,一旦管道的写入端关闭并且数据已从读取端完全读取,系统会自动删除管道。因为你不能从管道中两次!
那么,一旦数据完全读写结束,系统不删除管道的原因是什么?