是unlink
,fsync
和rename
是唯一由定義原子嗎?什麼文件系統操作需要原子?
編輯:原子意味着操作要麼成功,要麼有效,要麼失敗,沒有效果;一個操作不能失敗併產生影響。
清楚如果內核恐慌,該程序無法處理的操作失敗的錯誤,但它必須在這種情況下,考慮到它並不能
是unlink
,fsync
和rename
是唯一由定義原子嗎?什麼文件系統操作需要原子?
編輯:原子意味着操作要麼成功,要麼有效,要麼失敗,沒有效果;一個操作不能失敗併產生影響。
清楚如果內核恐慌,該程序無法處理的操作失敗的錯誤,但它必須在這種情況下,考慮到它並不能
我不知道fsync(2)
是原子的;如果一個文件在緩衝區高速緩存中有100兆字節髒,則需要幾秒鐘才能寫出該數據,並且在傳輸到磁盤過程中內核可能會崩潰。也許船上的DMA引擎只能處理4兆字節的寫入。也許沒有DMA支持,並且CPU必須通過512字節塊安排每個寫入。
你是什麼意思的'原子'?
mkdir
可能是'atomic',或者該目錄存在於磁盤上並且鏈接到父目錄,或者目錄數據結構尚未鏈接到父目錄中,因此無法訪問 - > doesn'不存在。
同樣可能爲mount(2)
:很難找到中途完成的mount(2)
,如果失敗,則整個掛載失敗:掛載文件系統或掛載文件系統。
umount(2)
很有趣,它可以懶散地完成,但是一旦它被卸載,它就不能用於open(2)
或creat(2)
調用。
所以,我想它歸結爲,你是什麼意思的'原子'? :)
這裏的一篇文章列舉了一些原子文件操作:
http://rcrowley.org/2010/01/06/things-unix-can-do-atomically.html
mv
,link
,symlink
,mkdir
和打開文件是原子的一些方法。
您應該明確操作系統,文件系統類型和版本。 – 2011-03-08 12:06:32
@OndrejTucny:如果我理解正確,他指的是posix風格的系統,因此這些信息不存在。 – mafu 2012-02-01 13:15:47