在我的程序(在Mac OS X上)中,我使用以下代碼打開了該文件。打開讀取和寫入的文件可以取消關聯
int fd;
fd = open(filename, O_RDWR);
計劃要刪除的文件如下:
unlink(filename);
在我的情況,我有被打開,刪除相同的文件。我觀察到以下內容:
- 打開文件後,我可以使用此程序甚至通過使用
rm
命令將其刪除。 - 刪除文件後,讀取和寫入操作對文件沒有任何問題。
我想知道背後的原因。如何防止rm
命令或unlink(2)
系統調用刪除正在打開的文件?
打開這不就是'取消鏈接的預期行爲(2)'?你檢查過文件嗎? 「如果 一個或多個進程在最後一個鏈接被刪除時打開文件,鏈接將被刪除,但文件的刪除將被延遲,直到所有對該文件的引用都被關閉。」 –
@CarlNorum:我檢查了取消鏈接(2)。這是預期的行爲。但是爲什麼unlink(2)之後的讀寫操作成功了? – doptimusprime
就像文檔說的那樣,文件在引用關閉之前不會被刪除。該文件仍然存在,所以'read'和'write'應該繼續工作,對吧? –