【发布时间】:2013-10-31 01:09:03
【问题描述】:
关闭 fstream 是否保证同步到文件系统?我正在与一位同事讨论这个问题,需要一个明确的参考。我对标准所说的内容以及在使用 Visual Studio 实现的 Windows 上发生的事情感兴趣。
另外,如果关闭并不意味着同步,是否有标准的 C++ 方法来确保同步完成?
【问题讨论】:
-
Force write of a file to disk 的可能重复项 - 它不是此问题的确切重复项,但其中一个很好的答案完全匹配。
-
您无需关心后续程序的“数据是否在磁盘上”。即使它只是在文件系统缓存中,下面的程序也会看到它。否则操作系统会严重损坏。你当然可以依赖
fclose()暗示fflush(). -
@EJP:然后阅读标准并停止猜测:§ 27.9.1.4(又名 [filebuf.members]),第 6 项:“...函数关闭文件(好像通过调用 @ 987654325@)。”
-
@static_rtti 来自 C11 草案(我没有最终文档):7.21.5.1 说“成功调用 fclose 函数会导致流指向的流被刷新并关联要关闭的文件。流的任何未写入的缓冲数据都将传递到主机环境以写入文件 [...]"。如果数据可能丢失,关闭文件有什么意义?如果当然不能保证操作系统不会在某处缓存操作,这就是操作系统的问题,请阅读操作系统文档。在 POSIX 上,我们可以使用
fsync()来确保数据安全。
标签: c++ windows visual-c++ file-io language-lawyer