【问题标题】:Alternative to Fsync for windows c++Windows C++ 的 Fsync 的替代品
【发布时间】:2015-10-14 18:45:02
【问题描述】:

有没有 fsync for windows 的替代方法? (C++ 构建器)

fsync 需要包含 unistd.h 并且仅适用于 unix 系统

谢谢!

【问题讨论】:

标签: c++ windows fsync


【解决方案1】:

_commit 看起来不错,它需要一个文件描述符,就像fsync 一样:

_commit 函数强制操作系统将与 fd 关联的文件写入磁盘。此调用可确保立即刷新指定文件,而不是由操作系统自行决定。

【讨论】:

    【解决方案2】:

    fflush 函数可以满足您的需求,但它只适用于文件句柄。

    或者,FlushFileBuffers 可能适合您,但它是特定于 Windows 的。

    【讨论】:

    • “仅适用于文件句柄”是什么意思?如果我使用 file* 和 fopen 那么 fflush 就足够了吗?
    • @user687459 - 正确,fflush 适用于 FILE * 类型,所以你应该很高兴。
    • 不行!完整的故事是我写了〜50MB的文件,旧文件也存在。写完之后,我把它复制到PC上的其他位置,但是当我复制时,新文件仍然没有更新,所以它复制了旧文件或新版本的损坏文件......有什么想法吗?跨度>
    • 所以您要让两个不同的文件在计算机之间保持同步?这根本不是fsyncfflush 所做的。您可能想提出一个新问题并包含该特定信息。
    • fflush 将程序的 I/O 缓冲区刷新到内核系统调用。它 模拟或调用fsyncFlushFileBuffers,两者都确保内核 已将其缓冲区写入磁盘。这是一个重要的区别。
    【解决方案3】:

    来自手册页:

    fflush() 强制写入所有用户空间 通过流的给定输出或更新流的缓冲数据 底层写函数。

    上面提到的写函数告诉操作系统文件的内容应该是什么。此时,所有更改都会在实际提交到磁盘之前保存在文件系统缓存中。

    POSIX 函数fsync() 告诉操作系统将所有更改从其缓存同步到磁盘。正如其他人所说,您可以在 Windows 平台上使用FlushFileBuffers

    【讨论】:

      猜你喜欢
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      相关资源
      最近更新 更多