在仅输出的 fstream 上调用 sync() 是否有意义?

Does it makes sense to call sync() on output-only fstream?

我发现一些遗留公司代码使用 std::fstream 并在每次写入后调用 fs.flush(),然后每次将一定量的数据写入流时调用 fs.sync()这段代码只需要做输出操作,不需要输入操作

std::fstream fs(filename, ios::out | ios::binary);
fs.write(buff, size);
fs.flush();
if (/* needs to sync */) {
  fs.sync();
}

这让我感到惊讶,因为我通常使用 std::ofstream 进行仅输出 IO 操作,因为这个 class 实际上没有 sync() 方法。

由于std::ofstream没有sync()方法,使用std::fstreamsync()进行只输出IO操作有意义吗?

在我的具体情况下,我是否应该继续使用 std::ofstream 并在不考虑 sync 的情况下调用 flush

如果您查看 http://www.cplusplus.com/reference/fstream/fstream/,您会在“Public 继承自 istream 的成员函数”标题下找到 sync,其描述为:

Synchronize input buffer

Synchronizes the associated stream buffer with its controlled input sequence.

所以不,output-only 代码不需要这,并且不会在那里做任何有用的事情。

如果从代码的逻辑来看,它认为它正在执行 fsync 等效操作,则您需要以不同的方式执行此操作。看 How to do fsync on an ofstream?