Namespaces
Variants

std::ios_base:: sync_with_stdio

From cppreference.net
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++ 스트림의 각 I/O 작업이 즉시 해당 C 스트림의 버퍼에 적용됨을 의미합니다. 이를 통해 C++와 C I/O를 자유롭게 혼합하여 사용할 수 있습니다.

또한, 동기화된 C++ 스트림은 스레드 안전성이 보장됩니다 (여러 스레드에서 출력된 개별 문자가 서로 엇갈릴 수는 있지만, 데이터 경쟁이 발생하지는 않습니다).

동기화가 꺼져 있으면 C++ 표준 스트림은 자신의 I/O를 독립적으로 버퍼링할 수 있으며, 이는 경우에 따라 상당히 빠를 수 있습니다.

기본적으로, 여덟 개의 표준 C++ 스트림은 각각의 C 스트림과 동기화됩니다.

이 함수가 표준 스트림에서 I/O가 발생한 후 호출되면, 그 동작은 구현체에 따라 정의됩니다: 구현체마다 아무런 효과가 없는 경우부터 읽기 버퍼를 파괴하는 경우까지 다양합니다.

목차

매개변수

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++ 스트림 간 '동기화'의 의미가 명시되지 않음
둘 다 명시됨

참고 항목

표준 C 출력 스트림에 기록 stdout
(전역 객체)
표준 C 오류 스트림에 기록 stderr , 버퍼링되지 않음
(전역 객체)
표준 C 오류 스트림에 기록 stderr
(전역 객체)