我想读取键盘操作,有些按键会生成ESC[...
,当我读取ESC
时,我想判断ESC键是否被按下或者其他键。 (也就是说,当我读取它时,如何检查stdin缓冲区中是否有字符?)
我关闭了行输入模式,在linux下我可以使用下面的代码来解决问题:
int check_keydown()
{
#if defined _WIN32
#else
int ch = 0;
int res = read(STDIN_FILENO, &ch, 1);
if (res > 0)return ch;
return -1;
#endif
}
但是我不知道如何在windows中实现同样的功能。
(我检查了ncurses的源代码,它使用ReadConsoleInput
来读取键盘操作,这不是我想要的。我想知道如何检查stdin缓冲区是否为空通过非阻塞方式)
有人可以告诉我该怎么做吗,先谢谢了。
最佳答案
获取可供读取的输入数量,Windows|Linux:
int get_unread_input_count()
{
#ifdef _WIN32
DWORD n;
return GetNumberOfConsoleInputEvents( GetStdHandle(STD_INPUT_HANDLE), &n ) ? (int)n : 0;
#else
int n;
return ioctl( STDIN_FILENO, FIONREAD, &n ) ? 0 : n;
#endif
}
关于c - 如何使用非阻塞方式检查stdin是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69393895/