Неблокирующий ввод с клавиатуры в c
Я хочу получить пользовательский ввод без блокировки.
Вот некоторый упрощенный код.
int main(int argc, char* argv[]) {
struct termios tty;
tcgetattr(STDIN_FILENO, &tty);
tty.c_lflag &= ~ICANON;
tty.c_cc[VMIN] = 1;
tcsetattr(STDIN_FILENO, TCSANOW, &tty);
while (1) {
GetCommand();
other_functions...
}
return 0;
}
Если есть входной символ, обработайте его. И запустить нормальный процесс против.
Но код заблокирован в функции GetCommand.
void GetCommand(void) {
if (kbhit()) {
char ch = fgetc(stdin);
processing...
}
}
int kbhit(void) {
fd_set fds;
FD_ZERO(&fds);
FD_SET(STDIN_FILENO, &fds);
select(STDIN_FILENO + 1, &fds, NULL, NULL, NULL);
return FD_ISSET(STDIN_FILENO, &fds);
}
Когда я нажимаю на клавиатуру, он обрабатывает эту клавишу и обрабатывает другие функции только один раз. И блокировка.
Как я могу получить то, что я хочу?