在子进程中调用dup2和execvp之后,父进程中的文件描述符表会发生什么?

时间:2014-07-31 02:54:38

标签: c process exec dup2

我正在编写一个简单的shell程序,但不确定在dup2()和execvp之后文件描述符表会发生什么。所以我有一个父进程等待子进程结束(waitpid)但是当它循环回来等待下一个用户输入时,我在子进程中使用dup2修改的文件描述符表怎么不在父进程中持久存在?是因为execvp将文件描述符表重置回原始文件?

编辑:我明白了。 fork函数实际上是程序映像的单独副本,包括文件描述符表,因此父进程的fd表不受影响。

1 个答案:

答案 0 :(得分:0)

无。当子进程由fork()创建时,它会获取父进程的文件描述符的副本,但是在父进程没有被共享回父进程后进行更改。

(注意,虽然文件描述符 table 不与父共享,但文件描述符本身的状态是!例如,如果文件描述符上有seek(),那么从其父级继承的子进程,也会影响父级的副本。)

相关问题