Как получить последнюю нажатую клавишу, не останавливая программу на C? - PullRequest
1 голос
/ 03 октября 2009

Написание приложения с интерфейсом командной строки, и я хотел бы в любое время узнать, нажата ли клавиша F1 или ESC или клавиша со стрелкой. Какой самый простой способ сделать это? Я хотел бы избежать использования библиотеки типов readline.

Это специфический для Linux вопрос; программа не многопоточная.

Ответы [ 3 ]

5 голосов
/ 03 октября 2009

Нет способа сделать это в стандарте C, но реализации C в различных операционных системах обычно имеют некоторое расширение для этого.

В Windows вы можете использовать getch (). В Linux и Unix посмотрите на этот вопрос:

Неблокирующий getch (), ncurses

Кроме того, это самый первый вопрос в разделе «Зависимости системы» в списке часто задаваемых вопросов C:

19,1

2 голосов
/ 03 октября 2009

Реализация kbhit () для Linux представлена ​​на Начало программирования на Linux стр. 167. Вы можете прочитать его в режиме онлайн по указанной ссылке.

РЕДАКТИРОВАТЬ: я упоминаю kbhit (), потому что он был опубликован в качестве решения, прежде чем стало ясно, что вопрос связан с Linux. К сожалению, решение было удалено, что вызывает сожаление. Принцип состоит в том, что когда kbhit () возвращает ненулевое значение, последующее блокирование символьно-ориентированного вызова чтения не будет блокироваться. Это верно только для символьно-ориентированного ввода; getchar () и другие стандартные функции, которые читают stdio, обычно ориентированы на строку , поэтому блокируйте до новой строки.

1 голос
/ 03 октября 2009

Несколько нитей?

...