fork()之前的文件描述符

ric*_*ert 4 c unix fork file-descriptor

我知道如果我在open之前调用该函数fork(),则IO指针在进程之间共享.

如果其中一个进程关闭了调用该close(fd)函数的文件,其他进程是否仍然能够写入/读取该文件,或者该文件是否会为每个人关闭?

P.P*_*.P. 7

是.每个进程都有一个文件描述符的副本(以及其他内容).因此,关闭它的一个过程不会影响fd其他过程的副本.

来自fork()手册:

子进程继承父进程打开文件描述符的副本.子节点中的每个文件描述符引用相同的打开文件描述(请参阅open(2))作为父节点中的相应文件描述符.这意味着两个描述符共享打开文件状态标志,当前文件偏移和信号驱动的I/O属性(请参阅fcntl(2)中的F_SETOWN和F_SETSIG的描述).

来自close()手册:

如果fd是引用底层打开文件描述的最后一个文件描述符(参见open(2)),则释放与打开文件描述相关联的资源; 如果描述符是使用unlink(2)删除的文件的最后一个引用,则删除该文件.

因此,如果您这样做,close(fd);它只关闭该进程中的引用,并且另一个对同一文件描述符的引用的进程可以继续对其进行操作.