std::basic_istream<CharT,Traits>::sync
int sync(); |
Синхронизирует буфер ввода с источником данных.
Ведёт себя как UnformattedInputFunction, за исключением того, что gcount() не затрагивается. После создания и проверки объекта sentry,
Если rdbuf() является указателем null, возвращает -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 |
См. также
|
[virtual]
|
синхронизирует буферы с соответствующей последовательностью символов (виртуальная защищённая функция члена std::basic_streambuf<CharT,Traits>) |
| синхронизирует с базовым устройством хранения (публичная функция члена std::basic_ostream<CharT,Traits>) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/basic_istream/sync