2010-04-02 60 views
2

我有兩個目錄項,a和b。 之前,a和b指向不同的inode。 之後,我想讓b指向與in相同的inode。 我希望這是安全的 - 我的意思是如果我在某處失敗,b或者指向它的原始inode或者inode。最特別的是,我不想結束b消失。用原子替換硬鏈接到另一個文件的文件

覆蓋時mv是原子。

當目標已經存在時,ln似乎不工作。

所以它看起來像我可以說:

LN一個TMP MV TMP b

結果失敗會留下一個「TMP」的文件周圍,這是不可取的,但不是災難的情況下。

有沒有更好的方法來做到這一點?

(什麼實際上,我試圖做的是替換有包含內容單一的inode相同內容的文件,所有目錄條目之間共享)

回答

0
ln a tmp ; mv tmp b 

其實這樣做的最快方法原子,如你在你的問題中所述。

(Nitpickers角落:更快地將兩個系統中的一個程序調用)

0

ln a tmp && mv tmp b || rm tmp

似乎更好,因爲這時如果ln失敗,則mv不再執行(和弄亂標準錯誤時失敗)。

相關問題