2010-05-04 60 views
5

我正在設計一個將時間序列數據寫入文件的系統。數據是8字節的塊,分爲兩個4字節部分,時間和有效載荷。是否爲WriteFile原子?

根據MSDN,WriteFile函數是原子的(http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx),如果寫入的數據小於扇區的大小。

由於文件將只包含這些塊(沒有文件的「結構」,因此無法重建損壞的文件),並且一個接一個地添加,這對於整個塊或者沒有寫入是至關重要的在任何時候都可以訪問該文件。

所以問題是,我是否正確地理解了一個小於一個扇區大小的寫文件總是寫到磁盤上或根本不寫入,無論在實際調用writefile期間發生了什麼?

回答

6

只要寫入不跨文件中的扇區邊界,WriteFile就是原子。因此,如果扇區大小爲512字節,則從文件偏移量0開始寫入20個字節將是原子的,但寫入文件偏移量500的相同數據不會是原子的。在你的情況下,寫入應該是原子的,因爲扇區大小應該是8的倍數。

This MSDN blog有關如何在不使用事務NTFS的情況下執行原子多扇區寫入的更多信息。

+0

只要機器處於健全狀態,它是否爲原子? (即如果進程可能會崩潰,但內核保持良好狀態,那麼它是否是原子?) – Mehrdad 2014-01-14 11:31:30