就我了解的情况来看,Fd是用于在内核文件描述符表中查找已打开文件的整数。因此,如果你有像这样的代码段:
int fd[2], temp1, temp2;
pipe(fd);
temp1 = fd[0];
temp2 = fd[1];
close(temp1);
close(temp2);
所有与管道相关的文件描述符都被关闭,因此该管道将不再存在。由于FD只是整数,因此说“close(temp1)”等同于说“close(fd [0])”。
考虑到这一点(如果我误解了,请告诉我),我对调用fork()后发生的事情感到困惑。由于子进程继承了相同的FD和父进程的状态,子进程的FD应该与父进程的相同。因此,按照这种逻辑,如果我在子进程中关闭了fd [0],我认为它也会防止父进程访问该文件。由于close()从文件描述符表中“释放”该整数,因此父进程不应该有任何方法来引用该文件。
这是真的吗?这似乎非常不可能是实际情况,因为这会导致父子之间的FD非常难以使用(特别是因为您不知道哪个进程将首先运行)。因此,如果这种逻辑是不正确的,那么FD是否在fork()上复制?在文件描述符表中,父进程和子进程Fds之间的关系是什么,尤其是在close()调用之间?能够画出文件描述符表对我很有帮助,因此我希望得到尽可能具体的答案。
感谢您对此的任何帮助!