代码之家  ›  专栏  ›  技术社区  ›  Szymon Lipiński

不使用系统和HDD缓存写入文件

c++
  •  3
  • Szymon Lipiński  · 技术社区  · 15 年前

    在没有使用系统缓存和驱动器缓存的情况下,如何在C++中写入文件?我只想在硬盘上准确地写,不管系统缓存设置如何。

    3 回复  |  直到 15 年前
        1
  •  3
  •   MSN    15 年前

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

    C运行时库公开 fflush(FILE *) 这样做。Windows有 FlushFileBuffers 以及你可以传递给 CreateFile ( FILE_FLAG_NO_BUFFERING )(这本身就增加了对你能做什么的限制)。

    尝试绕过写缓存的另一种方法是使数据结构能够抵御部分失败。对于文件,一种流行的技术是在文件的其余部分写入之后写出文件头。假设墨菲不是马基雅维利式的行为,那就足够了。

    或使用操作系统提供的文件替换或事务功能(请参见 ReplaceFile Transactional NTFS 对于Windows)。

        2
  •  2
  •   villintehaspam    15 年前

    这高度依赖于操作系统。在Windows上,打开文件时可以指定文件\标志\无缓冲 CreateFile 禁用系统缓存。不过,您将无法绕过硬盘缓存。

        3
  •  1
  •   Ignacio Vazquez-Abrams    15 年前

    在Linux上,您可以通过 O_DIRECT open(2) 为了避免操作系统缓存,但您对驱动器缓存的控制级别不同。