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

StackOverflow https://stackoverflow.com//questions/25050117

  •  21-12-2019
  •  | 
  •  

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

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

有帮助吗?

解决方案

虚无。子进程获取父进程的文件描述符的副本,当它由 fork(), ,但之后所做的更改不会共享回父级。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top