在仅输出的 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::fstream
和sync()
进行只输出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?
我发现一些遗留公司代码使用 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::fstream
和sync()
进行只输出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?