2015-01-07 5 views
0

를 끈 경우에도 반환 및 리눅스 3.12, GCC 4.8의 콘솔에서이 간단한 프로그램을 실행하지 않습니다getchar가 버퍼링 내가 컴파일

#include <stdio.h> 
main() { 
     setvbuf(stdin, NULL, _IONBF, 0); 
     printf("%c\n", getchar()); 
} 

프로그램을 실행하고 편지를 눌러 프로그램을 종료하지 않는 한하지 않습니다 Enter 키를 누릅니다.

getchar()이 작동하지 않는 이유는 무엇입니까? 어딘가에 숨겨진 버퍼가 있습니까?

답변

1

터미널이 입력을 버퍼링하고 있습니다. 터미널 송신자가 수신 한 입력을 통과 할 때까지 프로그램은 그것을 볼 수 없으며 기본적으로 개행을 볼 때까지 통과하지 않습니다.

Linux에서 bash를 실행하는 경우 stty -icanon을 실행하면 줄 바꿈없이 모든 입력을 직접 통과하도록 터미널 설정이 변경되어야합니다.

0

터미널이 버퍼링을 수행 중입니다. 터미널은 enter 키를 누를 때까지 포어 그라운드 프로그램의 표준 입력에 실제로 행을 쓰지 않습니다.

프로그램이 예상대로 작동하는지 보려면 echo 'a' | ./myprog을 실행하면됩니다. 즉시 종료되어 단일 문자를 인쇄합니다.