std::basic_istream<CharT,Traits>::sync
int sync(); |
Синхронизирует буфер ввода со связанным источником данных.
Ведёт себя как функция неформатированного ввода, за исключением того, что gcount() не затрагивается. После создания и проверки объекта sentry
Если 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++.
| Отчёт | Применяется к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 62 | C++98 |
sync() возвращал traits::eof(), если rdbuf()->pubsync() возвращает -1 | в этом случае возвращает -1 |
См. также
|
[виртуальная] | синхронизирует буферы со связанной последовательностью символов (виртуальная защищённая функция-член 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/cpp/io/basic_istream/sync