[완료] c++에서 cout 버퍼 질문입니다

hwanikani의 이미지

아래 질문 올린거에 관해 여러모로 궁금증이 생겨서
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가 되는 이유는 뭔가요?

DarkSide의 이미지

버퍼가 꽉찬다는 말은 좀 이상하고
std::cout << 'a'; 에서 a 가 출력되면서 플러시가 되는 거 아닌지.

cinsk의 이미지

프로그램이 끝날 때, exit()가 호출되고, 이 때, static duration을 가지는 cin, cout 등이 destroy됩니다. 이 때 자동으로 flush 됩니다.

hwanikani의 이미지

위 프로그램 같은 경우는

제가 그래서 infinite loop을 프로그램 종료 되기 전에 걸어 놨거든요?

그런데도 a가 flush되서 출력된 상태로 infinite loop안에 갇혀 있더군요 (프로그램이 종료되기 전).

terzeron의 이미지

제가 Ubuntu하고 Cygwin에서 테스트해보니 출력되지 않습니다.

말그대로 ostream은 버퍼링을 구현해놓은 것이기 때문에
상황에 따라(버퍼가 작거나/크거나, 이미 채워져 있거나/비워져 있거나, 출력이 가능하거나/불가능하거나) 출력이 될 수도 있고, 그렇지 않을 수도 있습니다.

cinsk의 이미지

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/

hwanikani의 이미지

감사드립니다!

익명 사용자의 이미지

ㅣㅣ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.