WriteFile是原子的吗?

ROA*_*OAR 6 ntfs writefile visual-c++

我正在设计一个将时间序列数据写入文件的系统.数据是8个字节的块,分为两个4字节部分,时间和有效负载.

根据MSDN,WriteFile函数是原子的(http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx),如果写入的数据小于扇区的大小.

由于文件只包含这些块(文件没有"结构",因此无法重建损坏的文件),一个接一个地添加,因此整个块或者没有任何内容写入文件是至关重要的.一直.

所以问题是,我是否正确地理解了,无论在实际调用writefile期间发生了什么,一个小于扇区的写文件总是完全写入磁盘或根本不写入?

Ale*_*lex 7

只要写入不跨越文件中的扇区边界,WriteFile就是原子的.因此,如果扇区大小为512字节,则从文件偏移0开始写入20个字节将是原子的,但是在文件偏移500处写入的相同数据将不是原子的.在您的情况下,写入应该是原子的,因为扇区大小应该是8的倍数.

此MSDN博客提供了有关如何在不使用事务处理NTFS的情况下执行原子多扇区写入的更多信息.