2016-04-07 55 views
1
  1. 在文件是load -ed/require -d時,文件是否被鎖定?
  2. 如果沒有,我怎麼能獨佔鎖定從期間load/require寫入文件?

也許,File#flock應該如果是這樣使用的,但我不知道答案的第一個問題,以及如何將其與load/require結合起來。加載期間鎖定文件/要求

+1

設定,當你需要一個文件的系統調用的是紅寶石顯示紅寶石不獲取該文件的鎖,你可以在任何Linux系統上使用'strace的紅寶石-r設置-e「Set.new''驗證這一點安裝'strace',所以你建議可能是唯一的方法 – bjhaid

回答

2

當打開一個文件時,你擁有的唯一的保護是如果文件被刪除,從文件系統在技術上未鏈接和孤立的,你仍然可以讀取其中的內容。從該點開始,關閉文件將失去對它的任何訪問權限。這就是它是如何工作的POSIX類型的系統在任何情況下Windows可能不同。

沒有什麼,以防止過度寫入文件的一部分或截斷它,而你的進程試圖做它的東西另一個進程。

請記住File#flock只是一種禮貌的請求鎖定方式,除非其他正在操作文件的進程是禮貌的並且檢查您對文件狀態沒有任何保證。進程可以自由地忽略它,並在沒有警告的情況下修改文件。

確保沒有人接觸到您的文件的唯一方法是將其複製到專用/tmp目錄,測試該東西是否正確複製,然後從中讀取它。這是一個非常偏執的事情,所以我希望你在走這條路之前有一個令人信服的理由。

如果你能控制所有訪問您的文件的過程,使他們乖巧的公民,並使用一個一致的鎖定機制,你可能會被罰款的文件。如果情況並非如此,您可能希望擁有一個主進程,使用某種IPC信令獨佔授權訪問這些文件。