Чтение из 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 (и, конечно же, вернуть его обратно, когда закончите).

Другие вопросы по тегам