2011-12-30 53 views
1

在Linux中關閉ruby中的文件而不先關閉它是安全的嗎?有關係嗎?可以在不關閉紅寶石的​​情況下取消鏈接文件嗎?

+0

在linux上我會說這是完全合法的,因爲你*可以*刪除一個文件而不關閉它。它用於例如創建不可發現的臨時文件。 – 2011-12-30 09:41:17

+1

這取決於*操作系統*。在Posix系統(和Linux)上它是可以接受的(通常的做法是獲得真正的臨時文件)。我聽說它在Windows上不允許刪除(不能刪除打開的文件),但我對Windows一無所知。 – 2011-12-30 09:42:36

+0

Ruby提供了非常方便的方法來打開,修改,然後關閉一個文件;很少,如果你的Ruby代碼有任何懸掛文件句柄。 – ranksrejoined 2011-12-30 09:44:34

回答

4

在Linux上,這是安全的,並且通常用於創建無法發現臨時文件。

只要您打開文件,您可以讀取和寫入文件,無論文件是否被刪除都無關緊要。該文件將在您關閉它時真正消失並刪除它,而不管順序如何。

+0

但Ruby確實這樣做,還是在刪除文件之前關閉了文件? – nitro2k01 2011-12-30 10:09:04

+0

@ nitro2k01當你解除鏈接時,Ruby不會關閉文件,它只是發出一個「unlink」系統調用。 – 2011-12-30 10:14:03

+0

必須注意的是,如果在文件打開時檢查'/ proc/$ PID/fd'目錄,你仍然可以發現它們 – 2011-12-30 11:45:56