小编mov*_*333的帖子

在C中,子项关闭的文件描述符是否也在父项中关闭?

据我所知,Fds是整数,用于在内核的文件描述表中查找打开的文件.因此,如果您有这样的代码段:

int fd[2], temp1, temp2;
pipe(fd);
temp1 = fd[0];
temp2 = fd[1];
close(temp1);
close(temp2);
Run Code Online (Sandbox Code Playgroud)

管道的所有文件描述符都已关闭,因此管道将不再存在.由于FD只是简单的说法,说法close(temp1)与说法完全相同close(fd[0]).

鉴于这一切(如果我误解,请告诉我)我对fork()通话后发生的事情感到困惑.由于子进程继承了相同的FD和父进程的状态,因此子进程的FD应该与父进程相同.所以通过这个逻辑,如果我close(fd[0])在孩子身上,我相信它也会阻止父母访问该文件.由于close()从文件描述符表中"释放"了整数,因此父级不应该有任何方式来引用该文件.

是这样的吗?这似乎不太可能是实际情况,因为它会导致父母和孩子之间的FD很难使用(特别是因为你不知道哪个进程会先运行).那么,如果这个逻辑是不正确的,FD是否重复fork()?文件描述符表中的父和子Fds如何相关,特别是在close()调用之间?能够绘制文件描述符表对我有很大帮助,所以我希望尽可能具体地作为答案.

感谢您的帮助!

c fork pipe file-descriptor

5
推荐指数
1
解决办法
2744
查看次数

标签 统计

c ×1

file-descriptor ×1

fork ×1

pipe ×1