使用 kbhit() 和 getch() 等效项在 Linux 中访问键盘输入
提供的 Windows 代码利用特定于平台的函数 _kbhit( ) 和 _getch() 来监视键盘输入而不中断程序循环。然而,这些函数在 Linux 系统上不可用,需要替代方法。
POSIX 兼容的 kbhit() 等效项
如果您的 Linux 系统缺少 conio.h 标头支持 kbhit(),请考虑利用 Morgan Mattews 的实现。此解决方案在任何符合 POSIX 标准的系统上模拟 kbhit() 功能。
解决 getchar() 问题
在 termios 级别停用缓冲不仅可以解决 kbhit()问题还解决了与 getchar() 相关的任何问题,如所提供的资源中所示。这种方法确保立即接收输入,而无需等待 Enter 按键。
与示例代码集成
要使提供的示例代码适应 Linux 系统,请考虑替换 _kbhit () 和 _getch() 及其符合 POSIX 标准的等效项。下面修改后的代码演示了这种集成:
<code class="cpp">#include <termios.h> #include <unistd.h> #include <iostream> int main() { // Disable input buffering termios oldt, newt; tcgetattr(STDIN_FILENO, &oldt); newt = oldt; newt.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &newt); while (true) { if (kbhit()) { char c = getchar(); if (c == 'g') { std::cout << "You pressed G" << std::endl; } } sleep(500); std::cout << "Running" << std::endl; } // Restore input buffering tcsetattr(STDIN_FILENO, TCSANOW, &oldt); return 0; }</code>
此修改后的代码利用 Mattews 的 kbhit() 实现并停用输入缓冲来实现与原始 Windows 代码类似的功能。
以上是如何在 Linux 中实现非阻塞键盘输入:kbhit() 和 getch() 等效项指南的详细内容。更多信息请关注PHP中文网其他相关文章!