std::basic_istream<CharT,Traits>::sync
来自cppreference.com
< cpp | io | basic istream
int sync(); |
||
将输入缓冲区与关联数据源同步。
表现为无格式输入函数 (UnformattedInputFunction) ,除了不影响 gcount()。在构造并检查 sentry 对象后,
如果 rdbuf() 是空指针,那么返回 -1。
否则调用 rdbuf()->pubsync()。如果该函数返回 -1,那么调用 setstate(badbit) 然后返回 -1。否则返回 0。
参数
(无)
返回值
成功时返回 0,失败时或若流不支持此操作(无缓冲)时返回 -1。
注意
同 readsome() ,此函数是否对库提供的流做任何事由实现定义。目的一般是为了让下个读取操作拾取任何在流缓冲最后填充其获取区后,可能已对关联输入序列做出的更改。为达成它,sync()
可以清空获取区,或重填充它,或不做任何事。值得注意的例外是 Visual Studio,其中此操作在以标准输入流调用时舍弃未处理的输出。
示例
演示以文件输入使用输入流 sync()
,在一些平台上实现。
运行此代码
#include <iostream> #include <fstream> void file_abc() { std::ofstream f("test.txt"); f << "abc\n"; } void file_123() { std::ofstream f("test.txt"); f << "123\n"; } int main() { file_abc(); // 文件现在包含 "abc" std::ifstream f("test.txt"); std::cout << "从文件读取\n"; char c; f >> c; std::cout << c; file_123(); // 文件现在包含 "123" f >> c; std::cout << c; f >> c; std::cout << c << '\n'; f.close(); file_abc(); // 文件现在包含 "abc" f.open("test.txt"); std::cout << "使用 sync() 的情况下从文件读取\n"; f >> c; std::cout << c; file_123(); // 文件现在包含 "123" f.sync(); f >> c; std::cout << c; f >> c; std::cout << c << '\n'; }
可能的输出:
从文件读取 abc 使用 sync() 的情况下从文件读取 a23
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 62 | C++98 | sync() 在 rdbuf()->pubsync() 返回 -1 时返回 traits::eof()
|
此时返回 -1 |
参阅
[虚] |
将缓冲与关联的字符序列同步 ( std::basic_streambuf<CharT,Traits> 的虚受保护成员函数) |
与底层存储设备同步 ( std::basic_ostream<CharT,Traits> 的公开成员函数) |