【问题标题】:Is WriteFile atomic?WriteFile 是原子的吗?
【发布时间】:2010-05-04 12:58:18
【问题描述】:

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

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

由于文件将只包含这些块(文件没有“结构”,因此无法重建损坏的文件),一个接一个地添加,整个块至关重要,否则什么都不会写入文件。

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

【问题讨论】:

    标签: winapi ntfs writefile


    【解决方案1】:

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

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

    【讨论】:

    • 只要机器处于正常状态,它是原子的吗? (即如果进程可能崩溃,但内核保持良好状态,那么它是原子的吗?)
    猜你喜欢
    • 2014-09-21
    • 2011-03-03
    • 2010-12-11
    • 2020-05-07
    • 2013-01-26
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多