写入没有系统和硬盘缓存的文件

时间:2010-02-08 18:36:06

标签: c++

如何在不使用系统缓存和驱动器缓存的情况下用C ++写文件?无论所有系统缓存设置如何,我只想在硬盘上写一下。

3 个答案:

答案 0 :(得分:3)

除非您正在编写磁盘设备驱动程序,否则无法保证写入时不会进行任何缓存或处理。

C运行时库公开fflush(FILE *)来执行此操作。 Windows有FlushFileBuffers以及您可以传递给CreateFileFILE_FLAG_NO_BUFFERING)的标记(它本身会对您可以执行的操作添加限制)。

尝试绕过写入缓存的另一种方法是使您的数据结构适应部分故障。对于文件,一种流行的技术是在写入文件的其余部分之后写出文件的标题。假设墨菲而不是马基雅维利的行为,这应该足够了。

或使用操作系统提供的文件替换或交易功能(Windows版请参阅ReplaceFileTransactional NTFS)。

答案 1 :(得分:2)

这是高度依赖操作系统的。在Windows上,您可以在使用CreateFile打开文件时指定FILE_FLAG_NO_BUFFERING以禁用系统缓存。你不会绕过硬盘缓存。

答案 2 :(得分:1)

在Linux上,您可以将O_DIRECT传递给open(2)以尝试避免操作系统缓存,但您对驱动器缓存没有相同级别的控制。