如何在不使用系统缓存和驱动器缓存的情况下用C ++写文件?无论所有系统缓存设置如何,我只想在硬盘上写一下。
答案 0 :(得分:3)
除非您正在编写磁盘设备驱动程序,否则无法保证写入时不会进行任何缓存或处理。
C运行时库公开fflush(FILE *)
来执行此操作。 Windows有FlushFileBuffers
以及您可以传递给CreateFile
(FILE_FLAG_NO_BUFFERING
)的标记(它本身会对您可以执行的操作添加限制)。
尝试绕过写入缓存的另一种方法是使您的数据结构适应部分故障。对于文件,一种流行的技术是在写入文件的其余部分之后写出文件的标题。假设墨菲而不是马基雅维利的行为,这应该足够了。
或使用操作系统提供的文件替换或交易功能(Windows版请参阅ReplaceFile和Transactional NTFS)。
答案 1 :(得分:2)
这是高度依赖操作系统的。在Windows上,您可以在使用CreateFile打开文件时指定FILE_FLAG_NO_BUFFERING以禁用系统缓存。你不会绕过硬盘缓存。
答案 2 :(得分:1)
在Linux上,您可以将O_DIRECT
传递给open(2)
以尝试避免操作系统缓存,但您对驱动器缓存没有相同级别的控制。