[완료] c++에서 cout 버퍼 질문입니다
글쓴이: hwanikani / 작성시간: 금, 2010/11/26 - 7:36오후
아래 질문 올린거에 관해 여러모로 궁금증이 생겨서
output buffer에 관한 섹션을 읽어 봤습니다.
보니깐 화면에 디스플레이 하는 경우는 버퍼가 꽉찰때까지 기다리지 않는다고 하더군요.
flush 하는 경우가
1. 버퍼에 new line characer를 보낼때 (endl)
2. input을 기다리고 있을때
3. flush함수를 사용해서
라고 나와 있는데요. 그럼 예를들어
#include
int main()
{
std::cout << 'a';
while(1){}
return 0;
}
위와 같은 프로그램은 아무것도 프린트 안해야 하는게 정상 아닌가요?
(버퍼에 a가 남아 있기만 할뿐 화면에 출력 아무것도 안해야 하지 않나요 -_-;)
실제로 프로그램 예제 따라하면서 화면에 출력할때 flush를 한번도 쓴적이 없었던것 같은데
위와 같은 경우에 자동으로 flush가 되는 이유는 뭔가요?
Forums:
버퍼가 꽉찬다는 말은 좀 이상하고
버퍼가 꽉찬다는 말은 좀 이상하고
std::cout << 'a'; 에서 a 가 출력되면서 플러시가 되는 거 아닌지.
프로그램이 끝날 때, exit()가 호출되고, 이
프로그램이 끝날 때, exit()가 호출되고, 이 때, static duration을 가지는 cin, cout 등이 destroy됩니다. 이 때 자동으로 flush 됩니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
위 프로그램 같은 경우는 제가 그래서
위 프로그램 같은 경우는
제가 그래서 infinite loop을 프로그램 종료 되기 전에 걸어 놨거든요?
그런데도 a가 flush되서 출력된 상태로 infinite loop안에 갇혀 있더군요 (프로그램이 종료되기 전).
제가 Ubuntu하고 Cygwin에서 테스트해보니
제가 Ubuntu하고 Cygwin에서 테스트해보니 출력되지 않습니다.
말그대로 ostream은 버퍼링을 구현해놓은 것이기 때문에
상황에 따라(버퍼가 작거나/크거나, 이미 채워져 있거나/비워져 있거나, 출력이 가능하거나/불가능하거나) 출력이 될 수도 있고, 그렇지 않을 수도 있습니다.
buffered output은, 대개의 경우에
buffered output은, 대개의 경우에 fully buffered mode이 경우, 버퍼가 차면 flush하고, line buffered mode인 경우, 버퍼가 다 차거나 newline 문자가 오면 flush하는 특성을 지니지만, 모두 implementation-defined입니다. 즉, 그럴 수도 있고 아닐 수도 있습니다.
--
C FAQ: http://c-faq.com/
Korean version: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
답변 감사드립니다 ^^
감사드립니다!
ㅣㅣ
ㅣㅣ
댓글 달기