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 와 동기화된 경우, 다음 함수 쌍들은 동일한 효과를 가집니다:
실제로, 이는 동기화된 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
(전역 객체) |