Неблокирующий ввод с клавиатуры в 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);
}

Когда я нажимаю на клавиатуру, он обрабатывает эту клавишу и обрабатывает другие функции только один раз. И блокировка.

Как я могу получить то, что я хочу?

0 ответов

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