c - 如何使用非阻塞方式检查stdin是否为空

标签 c windows terminal

我想读取键盘操作,有些按键会生成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/

相关文章:

mysql - 如何在 CLI 中编辑 php.ini

c - 访问其指针从函数返回的结构中的二维数组时出现段错误

c++ - 为什么在下面的代码中将内存分配给 *p

c - 如何在C中实现访问说明符?

c - 以编程方式更改外部 DLL 的 VersionInfo

windows - 有MAKELONGLONG函数吗?

c++ - 在 MSVC 11 中 boost "destructor is not virtual"错误

android - 此 Android SDK 需要 Android Developer Toolkit 版本 21.0.0 或以上

python - 如何使用嵌入在 PyQt GUI 中的终端

python - 树莓派 : Auto run GUI on boot