c中的非阻塞键盘输入

时间:2018-02-07 02:45:19

标签: c keyboard termios

我想在不阻止的情况下获得用户输入。

这是一些简化的代码。

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 个答案:

没有答案