Spec-Zone.ru › C++

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

См. также

sync
[виртуальная]
синхронизирует буферы со связанной последовательностью символов
(виртуальная защищённая функция-член std::basic_streambuf<CharT,Traits>)
flush
синхронизирует с базовым устройством хранения данных
(открытая функция-член 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API