WriteFile是原子的吗?

时间:2010-05-04 12:58:18

标签: visual-c++ ntfs writefile

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

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

由于文件只包含这些块(文件中没有“结构”,因此无法重建损坏的文件),一个接一个地添加,所以整个块或者没有写入任何内容至关重要文件在任何时候。

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

1 个答案:

答案 0 :(得分:7)

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

This MSDN blog提供了有关如何在不使用事务处理NTFS的情况下进行原子多扇区写入的更多信息。