2013-03-30 2 views
4

C에서, 줄 바꿈 문자 \n을 인쇄 할 때까지 내 출력이 터미널에 인쇄되지 않는 경우가 있습니다. 예를 들어 : 왜 줄 바꿈까지 C가 셸에 인쇄되지 않습니까?

int main() 
{ 
    printf("Hello, World"); 
    printf("\n"); 
    return 0; 
} 

헬로우 월드

다음 printf (I은 GDB에서 중단 점을 설정에서이 알고)까지 인쇄되지 않습니다. 누군가가 왜 이런 일이 일어나고 어떻게 해결할 수 있는지 설명해 주시겠습니까?

감사합니다.

+0

TI wiki에서이 내용을 이해해야합니다. http://processors.wiki.ti.com/index.php/Tips_for_using_printf#Buffering_modes – us2012

+1

라인 버퍼링 (setvbuf (3) 또는 stdbuf (1)) – sehe

답변

8

이것은 성능상의 이유로 수행됩니다. 콘솔에 데이터를 전달하는 것은 문자 단위로 수행하기에는 너무 비쌉니다 (실행 속도 측면에서). 그래서 개행 문자가 인쇄 될 때까지 출력을 버퍼링하는 것입니다. 인쇄 할 때까지 문자가 배열로 수집됩니다.이 때 전체 문자열이 콘솔에 전달됩니다. 당신은 또한 다음과 같이 명시 적으로 출력을 강제 할 수

fflush(stdout); 
4

또한 fflush()에 당신은 setvbuf(3)로 버퍼링 옵션을 설정할 수 있습니다.

관련 문제