c ++ std :: ofstream flush()但不是close()

ano*_*non 13 c++ flush buffering ofstream

我在MacOSX上.

在我的应用程序的记录器部分,我正在将数据转储到文件中.

假设我有一个全局声明 std::ofstream outFile("log");

在我的日志代码中我有:

outFile << "......." ;
outFile.flush();
Run Code Online (Sandbox Code Playgroud)

现在,假设我的代码在flush()发生后崩溃了; 是否保证写入磁盘outFile之前写入的东西flush()(请注意,我不会调用a close()).

谢谢!

Tim*_*sch 13

从C++运行时的角度来看,它本应写入磁盘.从操作系统的角度来看,它可能仍然存在于缓冲区中,但如果整个机器崩溃,那只会是一个问题.


Dan*_*nga 6

作为替代方法,您可以完全禁用缓冲

outFile.rdbuf()->pubsetbuf(0, 0);
Run Code Online (Sandbox Code Playgroud)

写入无缓冲fstream可能会损害性能,但在测量之前担心这将是过早的优化.