[英]C: dup and close-on-exec
在一本關於C編程的(德語)書中(Linux-UNIX-Programmierung,由JürgenWolf)我發現了一個聲明,翻譯成英文如下(由我編號的句子):
在某些情況下,您可能需要復制文件描述符[1]。 這樣做的一個例子是,如果父進程想要與子進程交換數據,並且子進程通過使用
exec*()
[2]被新進程覆蓋。 在這種情況下,如果沒有dup() or dup2()
,將設置close-on-exec標志[3]。 設置此標志后,所有文件描述符都將變為無效(因為被新進程覆蓋) - 也就是說,它們不再存在[4]。 因此,父母和子女過程之間的溝通將被停止[5]。 另一方面,如果使用dup() or dup2()
復制文件描述符,則刪除close-on-exec標志,並且新覆蓋的進程可以使用此文件描述符進行通信[6]。
我認為上段包含一些誤導性陳述甚至錯誤。
在句子[3]中,我不明白為什么不使用dup()
或dup2()
會設置close-on-exec標志?
建議是錯誤的。 Close-on-exec僅設置在程序明確要求為close-on-exec的文件描述符上。
您可能選擇使用dup2
的原因可能是:
描述也有點誤導 - 它只是新的描述符(即dup()
或dup2()
的返回值),它具有close-on-exec未設置。 原始fd的close-on-exec狀態沒有變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.