gpt4 book ai didi

c++ - 关于 fstream 缓冲区,flush() 和 sync() 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 22:35:25 29 4
gpt4 key购买 nike

我正在阅读 cplusplus.com tutorial on I/O .最后,它说 fstream 缓冲区与磁盘上的文件同步

Explicitly, with manipulators: When certain manipulators are used onstreams, an explicit synchronization takes place. These manipulatorsare: flush and endl.

Explicitly, with member function sync(): Callingstream's member function sync(), which takes no parameters, causes animmediate synchronization. This function returns an int value equal to-1 if the stream has no associated buffer or in case of failure. Otherwise (if the stream buffer was successfully synchronized) itreturns 0.

除了一些其他隐含的情况(如析构和stream.close())

调用 fstream::flush() 和 fstream::sync() 有什么区别?结束?

在我的代码中,我一直使用flush()。

关于 std::flush() 的文档:

Flush stream buffer

Synchronizes the buffer associated with the streamto its controlled output sequence. This effectively means that allunwritten characters in the buffer are written to its controlledoutput sequence as soon as possible ("flushed").

关于 std::streambuf::sync() 的文档:

Synchronize input buffer with source of characters

It is called to synchronize the stream buffer with the controlled sequence (like the file in the case of file streams). The public member function pubsync calls this protected member function to perform this action.

如果这是一个新手问题,请原谅我;我是菜鸟。

最佳答案

basic_ostream::flush这是一个非虚拟函数,它将未提交的更改写入底层缓冲区。如果出现错误,它会在使用的流对象中设置一个错误标志。这是因为返回值是对流本身的引用,以允许链接。

basic_filebuf::sync这是一个 virtual 函数,它将所有挂起的更改写入底层文件并返回一个 错误代码 来表示成功或失败。

结束这在应用于 ostream 时,会将 '\n' 写入流,然后在该流上调用 flush

因此,本质上:flush 是任何流的更通用函数,而 sync 显式绑定(bind)到文件。 flush 是非虚拟的,而 sync 是虚拟的。这改变了在继承的情况下如何通过指针(指向基类)使用它们。此外,它们在报告错误的方式上也有所不同。

关于c++ - 关于 fstream 缓冲区,flush() 和 sync() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14251873/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com