Spec-Zone.ru › C++

std::ios_base::sync_with_stdio

static bool sync_with_stdio( bool sync = true );

Устанавливает, синхронизированы ли стандартные потоки C++ с стандартными потоками C после каждой операции ввода/вывода.

Стандартные потоки C++ — это: std::cin, std::cout, std::cerr, std::clog, std::wcin, std::wcout, std::wcerr и std::wclog.

Стандартные потоки C — это: stdin, stdout и stderr.

Для стандартного потока str, синхронизированного с потоком C f, следующие пары функций имеют идентичный эффект:

1) std::fputc(f, c) и str.rdbuf()->sputc(c).
2) std::fgetc(f) и str.rdbuf()->sbumpc().
3) std::ungetc(c, f) и str.rdbuf()->sputbackc(c).

На практике это означает, что синхронизированные потоки C++ не буферизированы, и каждая операция ввода/вывода с потоком C++ немедленно применяется к буферу соответствующего потока C. Это позволяет свободно смешивать ввод/вывод C++ и C.

Кроме того, синхронизированные потоки C++ гарантированно потокобезопасны (отдельные символы, выводимые из нескольких потоков, могут чередоваться, но гонок данных не происходит).

Если синхронизация выключена, стандартные потоки C++ могут буферизовать свой ввод/вывод независимо, что в некоторых случаях может быть значительно быстрее.

По умолчанию все восемь стандартных потоков C++ синхронизированы со своими соответствующими потоками C.

Если эта функция вызывается после того, как произошел ввод/вывод со стандартным потоком, поведение определяется реализацией: реализации могут варьироваться от отсутствия эффекта до разрушения буфера чтения.

Параметры

sync - новое значение синхронизации

Возвращаемое значение

Состояние синхронизации до вызова функции.

Пример

#include <cstdio>
#include <iostream>
 
int main()
{
    std::ios::sync_with_stdio(false);
    std::cout << "a\n";
    std::printf("b\n");
    std::cout << "c\n";
}

Возможный вывод:

b
a
c

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применено к Поведение как опубликовано Правильное поведение
LWG 49 C++98 не было указано (1) какое состояние фактически возвращается и
(2) что означает 'синхронизация' между стандартными потоками C и C++
оба указаны

См. также

coutwcout
записывает в стандартный поток вывода C stdout,
(глобальный объект)
cerrwcerr
записывает в стандартный поток ошибок C stderr, небуферизованный
(глобальный объект)
clogwclog
записывает в стандартный поток ошибок C stderr,
(глобальный объект)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/ios_base/sync_with_stdio

Spec-Zone.ru

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