我在程序A中打開一個文件,它的文件描述符是3.使用後跟一個execve的fork我執行另一個程序B,在那裏我立即打開另一個程序文件。這個文件描述符是4.如果A和B沒有共享文件描述符表,那麼在B中打開的文件的文件描述符應該是3.我需要創建不共享父級地址空間的子進程,包括打開的文件。不希望父進程和子進程共享同一個文件描述符表
非常感謝
我在程序A中打開一個文件,它的文件描述符是3.使用後跟一個execve的fork我執行另一個程序B,在那裏我立即打開另一個程序文件。這個文件描述符是4.如果A和B沒有共享文件描述符表,那麼在B中打開的文件的文件描述符應該是3.我需要創建不共享父級地址空間的子進程,包括打開的文件。不希望父進程和子進程共享同一個文件描述符表
非常感謝
孩子不共享相同的FD表,你只是忘了關閉它們在兒童或近距離上EXEC將它們標記。
在exec
之前關閉新文件。在fork()
和exec()
之間的代碼中執行此操作。
謝謝。但是有沒有一種方法可以在文件複製到新流程創建之前自動關閉文件。 – 2011-05-06 04:54:58
兩個答案都是正確的。我選擇另一個,因爲它給了我兩個選擇。非常感謝 – 2011-05-06 04:56:04
@ lgnacio謝謝。但是有沒有一種方法可以在文件複製到新流程創建之前自動關閉文件。 – 2011-05-06 04:54:36
將它們標記爲可執行。 http://stackoverflow.com/questions/1643304/how-to-set-close-on-exec-by-default/1644590#1644590 – 2011-05-06 04:59:15