2013-04-01 50 views
1

當進程分叉時,孩子將與其父母分享在分岔之前已打開的文件描述。如何在分岔而不是共享時複製文件描述?

有沒有辦法讓孩子擁有自己的文件描述副本(包括偏移量和文件狀態標誌)?

我需要這樣做,因爲我不希望父級和子級都共享相同的文件偏移量;如果一個進程已經完成了讀操作,我不想爲第二個進程改變文件的偏移量。

+0

你確定文件描述符不重複嗎? –

+0

文件描述符是爲孩子重複的,但它指向同一個打開的文件條目,我在這裏稱之爲「文件描述」,它包含文件的偏移量和狀態坡度。我也需要重複這一點。 – user22690

+0

這也是我感興趣的東西。也許有一些非可移植的方式在分叉時複製內核文件描述表? – onitake

回答

0

有'打開文件描述符'和'打開文件描述'。當用open()打開文件時,會創建文件描述符和文件描述。當文件描述符重複時(dup()dup2()),這兩個描述符引用相同的打開文件描述。

fork()上,父級中的文件描述符被複制(複製)到子級中;父級和子級中的描述符都指向相同的打開文件描述。

子進程應該有它自己的父文件描述符副本。每個兒童的文件描述符都應引用與父對應文件描述符相同的打開文件描述。

否則沒有辦法讓它工作 - 您將不得不關閉並重新打開文件以獲得單獨的打開文件描述。

相關問題