fork()后管道的行为

Ste*_*vin 8 c unix fork pipe

在UNIX环境中阅读高级编程中的管道时,我注意到在fork之后,父级可以close()读取管道的末尾,并且它不会关闭子级的读取端.当一个进程分叉时,它的文件描述符会被保留吗?

我的意思是,在fork之前,管道读取文件描述符的保留计数为1,并且在fork 2之后.当父级关闭其读取侧时,fd变为1并且为子级保持打开状态.这基本上是发生了什么?常规文件描述符是否也会出现这种情况?

paj*_*ton 6

正如人们可以在关于fork()的手册页上看到的那样:

子进程应拥有自己父文件描述符的副本.每个子文件描述符应引用与父文件的相应文件描述符相同的打开文件描述.

所以,是的,孩子拥有父文件描述符的精确副本,并且引用所有这些文件描述符,包括打开的文件.