std::basic_istream<CharT,Traits>::sync
来自 cppreference.com
< cpp | io | basic istream
int sync(); |
||
将输入缓冲区与相关联的数据源同步。
行为与 UnformattedInputFunction 相同,除了 gcount() 不受影响。在构造和检查哨兵对象后,
如果 rdbuf() 是一个空指针,则返回 -1.
否则,调用 rdbuf()->pubsync()。如果该函数返回 -1,则调用 setstate(badbit) 并返回 -1。否则,返回 0.
内容 |
[编辑] 参数
(无)
[编辑] 返回值
成功时为 0,失败时或流不支持此操作(无缓冲)时为 -1.
[编辑] 备注
与 readsome() 一样,此函数对库提供的流是否执行任何操作是实现定义的。通常,其目的是让下一个读取操作获取在流缓冲区最后一次填充其获取区域后可能对相关联的输入序列进行的任何更改。为了实现这一点,sync()
可以清空获取区域,或者重新填充它,或者什么也不做。一个值得注意的例外是 Visual Studio,在该环境中,当使用标准输入流调用此操作时,它会丢弃未处理的输入。
[编辑] 示例
演示了使用输入流 sync()
进行文件输入。请注意,由于对 std::basic_filebuf::sync 的调用对于读取是实现定义的,因此这里的输出是实现定义的。
运行此代码
#include <fstream> #include <iostream> 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(); // file now contains "abc" std::ifstream f("test.txt"); std::cout << "Reading from the file\n"; char c; f >> c; std::cout << c; file_123(); // file now contains "123" f >> c; std::cout << c; f >> c; std::cout << c << '\n'; f.close(); file_abc(); // file now contains "abc" f.open("test.txt"); std::cout << "Reading from the file, with sync()\n"; f >> c; std::cout << c; file_123(); // file now contains "123" f.sync(); f >> c; std::cout << c; f >> c; std::cout << c << '\n'; }
可能的输出
Reading from the file abc Reading from the file, with sync() a23
[编辑] 缺陷报告
以下行为改变的缺陷报告被追溯应用于之前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确的行为 |
---|---|---|---|
LWG 62 | C++98 | sync() 返回 traits::eof() 如果 rdbuf()->pubsync() 返回 -1 |
在这种情况下返回 -1 |
[编辑] 另请参阅
[虚拟] |
将缓冲区与关联的字符序列同步 ( std::basic_streambuf<CharT,Traits> 的虚拟保护成员函数) |
与底层存储设备同步 ( std::basic_ostream<CharT,Traits> 的公有成员函数) |