mov*_*333 5 c fork pipe file-descriptor
据我所知,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()
调用之间?能够绘制文件描述符表对我有很大帮助,所以我希望尽可能具体地作为答案.
感谢您的帮助!