std::basic_istream::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 << "Reading from the file\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 << "Reading from the file, with sync()\n";
    f >> c; std::cout << c;
    file_123(); // 文件现在含 "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

[编辑] 参阅

[虚]
将缓冲与关联的字符序列同步
(std::basic_streambuf 的虚受保护成员函数) [编辑]
与底层存储设备同步
(std::basic_ostream 的公开成员函数) [编辑]