Чтение из STDIN без нажатия ENTER
Мне нужно прочитать стандартный ввод в Linux, хотя моя программа будет получать только сообщения без новой строки.
Я попробовал этот код, но не работает:
int main ( void )
{
char p_char[48];
memset( p_char, 0, sizeof(p_char) );
fcntl( STDIN_FILENO, F_SETFL, FNDELAY );
read( STDIN_FILENO, p_char, sizeof(p_char) );
}
У кого-то есть предложение?
1 ответ
Решение
Вам необходимо изменить настройки терминала, чтобы каждый символ отправлялся немедленно. Вы можете сделать это, манипулируя termios
(страница руководства содержит подробности).
По сути это просто включает в себя создание двух termios
структуры, инициализирующие с текущими настройками tcgetattr
копирование структуры в другую структуру, изменение настроек буфера в ней, а затем установка терминала с новой структурой с помощью tcsetattr
(и, конечно же, вернуть его обратно, когда закончите).