2014-01-26 91 views
3

有沒有辦法在C/C++應用程序的Linux上編寫打開文件的方式,如果應用程序被終止,打開的文件將被丟棄?在進程死亡時放棄打開的文件

該應用程序可以被SIGKILL殺死,所以我不能使用信號處理程序。

+0

丟棄的意思是從文件系統中刪除(刪除)? – Harald

+0

可能不可能在流程本身內。寫入文件時是否有正確的名稱是重要的。如果沒有,你可以用一個臨時名稱來寫。如果該過程繼續存在直到close(),那麼重命名該文件。如果進程被終止,你如何擺脫臨時文件就是你想要做到這一點的緊急問題:定期清理cron,父進程注意到子進程已經死了,並在其後清理。 – Harald

回答

1

臨時文件的典型技巧是打開/創建文件,然後在不關閉文件描述符的情況下取消鏈接。

您最終得到一個文件描述符給一個不再存在的文件。您仍然可以讀取並寫入它,但只要您關閉文件描述符(或被終止),該文件將被移除並釋放它佔用的空間。

當然,如果您決定繼續保留文件,那並不會真正起作用。

+0

不能使用'link(「/ proc/self/fd/n」,「permanent-name」);'如果有人想保留這個文件? –

+0

@ BenVoigt通常,該鏈接會(非法)跨越文件系統邊界。這是一個特例嗎? –

+0

@Jonas:經過進一步的研究,顯然不是。 'proc /./fd'是特殊情況,它們是在目標被刪除時不會中斷的符號鏈接。但'鏈接'不夠聰明重新鏈接目標。也許還有一些其他功能是? –