2010-05-04 51 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