簡體   English   中英

在子進程中調用dup2和execvp之后,父進程中的文件描述符表會如何處理?

[英]What happens to the file descriptor table in parent process after calling dup2 and execvp in the child process?

我正在編寫一個簡單的Shell程序,但是不確定dup2()和execvp之后文件描述符表會發生什么。 因此,我有一個父進程等待子進程結束(waitpid),但是當它循環返回以等待下一個用戶輸入時,為什么我在子進程中使用dup2修改的文件描述符表不持久存在於父進程中? 是因為execvp將文件描述符表重置為原始表嗎?

編輯:我想通了。 fork函數實際上制作了程序映像的單獨副本,包括文件描述符表,因此父進程的fd表不受影響。

沒有。 子進程由fork()創建時會獲得父文件描述符的副本,但是在不共享給父文件之后,會對其進行更改。

(請注意,雖然文件描述符未與父文件共享,但文件描述符本身的狀態為!!例如​​,如果您在子描述符從其父文件繼承的文件描述符上進行seek() ,則會影響復制在父母中也是如此。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM