[C++] 표준 스트림

표준 스트림 동기화

1
ios_base::sync_with_stdio(bool sync = true);

C++ 표준 스트림들이 C 표준 스트림들과 각각 입출력 연산 후에 동기화를 할지 여부를 결정할 수 있다. 즉 C++ 스트림이 자신의 버퍼를 사용하지 않고 C 스트림 버퍼를 사용하게 된다. 그렇기 때문에 C의 스트림과 혼합해서 사용이 가능하다.

만약 해당 기능을 비활성화 했을 경우 입출력의 순서가 보장되지 않는다. 또한 동기화된 C++ 스트림은 thread safe하다. 동기화를 설정하지 않았다면 표준 C++ 스트림들은 각각의 입출력 연산에 대해 버퍼를 사용할 수 있고 이 경우 입출력 연산 속도를 크게 향상 시킨다.

스트림 엮기

1
2
ostream* tie() const;
ostream* tie(ostream* tiestr);

위 함수는 스트림을 엮어준다. 기본적으로 std::cin과 std::cout을 같이 사용했을 때 입출력이 제대로 이루어지는것 처럼 보이는 이유는 cin과 cout이 tie되어 있고 이에 따라 암묵적으로 buffer를 flush해주기 때문이다. 이 tie를 풀어버리게 되면 cin을 통해 사용자가 입력을 할 수 있지만 cout은 보이지 않는다. cout은 버퍼가 가득 찼을 경우에만 보여지게 된다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/21/Languages/Cplusplus/io-sync/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.