我正在嘗試使用熔絲實現內存中文件系統。重命名函數接受'from'和'to'參數。在熔絲文件系統中實現重命名
當我試圖在bash中這樣做, MV文件1文件2, 它在內部調用更名功能(我用-d選項檢查)。
當我嘗試在GUI中重命名該函數時,它再次調用重命名函數。
但是,如果file2是已經存在的文件,則mv命令覆蓋它,而GUI禁止我重命名該文件。我該如何執行這個約束,因爲這兩個操作在內部都沒有區別地調用重命名函數。
我正在嘗試使用熔絲實現內存中文件系統。重命名函數接受'from'和'to'參數。在熔絲文件系統中實現重命名
當我試圖在bash中這樣做, MV文件1文件2, 它在內部調用更名功能(我用-d選項檢查)。
當我嘗試在GUI中重命名該函數時,它再次調用重命名函數。
但是,如果file2是已經存在的文件,則mv命令覆蓋它,而GUI禁止我重命名該文件。我該如何執行這個約束,因爲這兩個操作在內部都沒有區別地調用重命名函數。
rename
函數用原子替換目標文件並刪除舊名稱。這是它的全部要點,如果它沒有做到這一點,那麼各種事情就會崩潰。對於想要防止重命名在另一個文件之上的應用程序,他們必須先使用link
函數(如果目標存在,將會失敗),然後在link
成功時使用舊名稱unlink
。
爲什麼你認爲'mv'的行爲對於你的文件系統來說比任何其他文件系統都不同? –
Afaik獲得該行爲的唯一方法是在調用'rename'之前檢查文件是否作爲單獨的操作存在。我猜你所描述的GUI是這樣做的。 –
我不認爲MV是不同的。我擔心的是,當我做mv file1 file2時,如果file2已經存在,它將被覆蓋。如果我對gui重新命名,它會阻止我。當我的代碼在內部調用重命名函數時,如何處理它。 – Torpedo