我想在不阻止的情况下获得用户输入。
这是一些简化的代码。
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);
}
当我按下键盘时,它会处理此键并仅处理其他功能一次。阻止。
我怎样才能得到我想要的东西?