2015-01-07 2 views
0

я скомпилировать и запустить эту простую программу в консоли Linux 3.12, GCC 4.8:GetChar не возвращается, даже если буферизация отключена

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

запустить программу и нажать любую букву, программа не завершается, если Я нажимаю клавишу ввода.

Что прекращает работу getchar()? Есть где-то скрытый буфер?

ответ

1

Проблема в том, что ваш терминал выполняет буферизацию ввода. Пока ваш терминал не отправит данные, которые он получает, ваша программа не может его увидеть, и по умолчанию она не проходит до тех пор, пока не увидит новую строку.

Если вы используете bash для Linux, запуск stty -icanon должен изменить настройки вашего терминала, чтобы передать все входные данные напрямую, не требуя новых строк.

0

терминал выполняет буферизацию. Терминал фактически не записывает линию на стандартный ввод программы переднего плана, пока вы не нажмете enter.

Чтобы увидеть, как программа выполняет то, что вы ожидаете, вы можете просто запустить echo 'a' | ./myprog. Он немедленно выйдет и распечатает одиночный символ.

Смежные вопросы