【发布时间】:2025-12-15 10:10:02
【问题描述】:
我正在开发 ACID 数据库软件产品,我对 WinOS 上的文件持久性有一些疑问。
CreateFile 有两个属性,FILE_FLAG_WRITE_THROUGH 和 FILE_FLAG_NO_BUFFERING - 我是否需要这两个属性来实现文件持久性(即覆盖各种磁盘或操作系统文件缓存) ?我问,因为他们似乎做同样的事情,并设置 FILE_FLAG_NO_BUFFERING 导致WriteFile 抛出一个 ERROR_INVALID_PARAMETER 错误。
【问题讨论】:
-
您在使用 FILE_FLAG_NO_BUFFERING 时收到的错误是因为您使用的缓冲区的内存地址(用于读取或写入)未正确对齐。请参阅this article,了解为什么会出现这种情况,以及放弃缓冲 IO 系统的好处和潜在缺陷。