gpt4 book ai didi

winapi - WriteFile 是原子的吗?

转载 作者:行者123 更新时间:2023-12-03 00:55:29 28 4
gpt4 key购买 nike

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

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

由于文件仅包含这些 block (文件没有“结构”,因此不可能重建损坏的文件),因此逐个添加,因此整个 block 或不写入任何内容至关重要始终保存该文件。

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

最佳答案

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

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

关于winapi - WriteFile 是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2765419/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com