有FlushFileBuffers()
Windows 中的 API 用于刷新缓冲区直至硬盘驱动器single文件。有sync()
Linux 中用于刷新文件缓冲区的 APIall files.
但是,是否也有 WinAPI 用于刷新所有文件,即sync()
analog?
https://learn.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-flushfilebuffers https://learn.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-flushfilebuffers
可以刷新整个硬盘驱动器。
要刷新卷上所有打开的文件,请使用该卷的句柄调用 FlushFileBuffers。调用者必须具有管理权限。有关更多信息,请参阅以特殊权限运行。
此外,同一篇文章还指出了如果由于某种原因必须刷新数据应遵循的正确过程:CreateFile
函数与FILE_FLAG_NO_BUFFERING
and FILE_FLAG_WRITE_THROUGH
flags.
由于系统内的磁盘缓存交互,在每次写入磁盘驱动器设备后使用 FlushFileBuffers 函数时,如果许多写入是单独执行的,则 FlushFileBuffers 函数的效率可能会很低。如果应用程序正在对磁盘执行多次写入,并且还需要确保将关键数据写入持久介质,则应用程序应使用无缓冲 I/O,而不是频繁调用 FlushFileBuffers。要打开用于无缓冲 I/O 的文件,请使用 FILE_FLAG_NO_BUFFERING 和 FILE_FLAG_WRITE_THROUGH 标志调用 CreateFile 函数。这可以防止文件内容被缓存,并在每次写入时将元数据刷新到磁盘。有关详细信息,请参阅创建文件。
但还要检查以下限制文件缓冲 https://learn.microsoft.com/el-gr/windows/desktop/FileIO/file-buffering关于内存和数据对齐。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)