【发布时间】:2012-08-03 07:35:08
【问题描述】:
我有以下情况。
我创建了一个管道。
分叉了一个子进程。
子进程显式地关闭管道的读取端并写入管道的写入端并退出而不关闭任何东西(exit 应该代表子进程关闭所有打开的文件/管道描述符, 我相信)。
Parent显式地关闭管道的写端并使用
fgets从管道的读端读取,直到fgets返回NULL。即它读取完整。
现在我的问题是,为什么父级在完成读取后需要显式关闭管道的读取端?从读取端读取完整数据后,系统完全删除管道不是明智的吗?
我在父项中明确关闭读取端,并且在打开更多管道时迟早会出现Too many file descriptors 错误。我的假设是,一旦管道的写入端关闭并且数据已从读取端完全读取,系统会自动删除管道。因为你不能从管道两次!
那么,一旦数据完全读写结束,系统不删除管道的原因是什么?
【问题讨论】:
-
“因为你不能从管道中两次!”???
-
@KerrekSB 我的意思是你可以读取同一个管道两次,但第二次会看到 EOF 对吗?
标签: c pipe fgets inter-process-communicat