Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在编写一个简单的 shell 程序,但不确定在 dup2() 和 execvp 之后文件描述符表会发生什么。所以我有一个父进程等待子进程结束(waitpid)但是当它循环回来等待下一个用户输入时,我在子进程中使用 dup2 修改的文件描述符表为什么不会保留在父进程中?是因为 execvp 将文件描述符表重置回原来的吗?
编辑:我想通了。fork 函数实际上制作了程序映像的单独副本,包括文件描述符表,因此父进程的 fd 表不受影响。
没有什么。子进程在创建时会获得父文件描述符的副本fork(),但在此之后所做的更改不会共享回父进程。
fork()
(请注意,虽然文件描述符表不与父共享,但文件描述符本身的状态是!例如,如果您seek()在子进程从其父进程继承的文件描述符上,这会影响父进程中的副本也一样。)
seek()