Linux 中的输入处理:kbhit() 和 getch() 的替代方法
在 Windows 中,_kbhit() 和 _getch() 函数提供一种无需停止程序即可检查键盘输入的简单方法。然而,这些功能在 Linux 上不可用。本文探讨了在 Linux 上处理输入的另一种方法。
Morgan Mattews 的代码
一种解决方案是利用 Morgan Mattews 提供的代码,它模拟了_kbhit() 以符合 POSIX 的方式。它涉及在 termios 级别停用缓冲。
getchar() 问题
禁用 termios 缓冲不仅可以解决 _kbhit() 缺失问题,还可以解决 getchar() 问题通过防止输入缓冲。
示例
<code class="c">#include <stdio.h> #include <termios.h> int kbhit() { struct termios oldt, newt; int ch; int oldf; tcgetattr(STDIN_FILENO, &oldt); newt = oldt; newt.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &newt); oldf = fcntl(STDIN_FILENO, F_GETFL, 0); fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK); ch = getchar(); tcsetattr(STDIN_FILENO, TCSANOW, &oldt); fcntl(STDIN_FILENO, F_SETFL, oldf); if (ch != EOF) { ungetc(ch, stdin); return 1; } return 0; } int main() { while (true) { if (kbhit()) { char c = getchar(); if (c == 'g') { printf("You pressed G\n"); } } printf("Running\n"); sleep(1); } return 0; }</code>
以上是如何在 Linux 中处理输入:kbhit() 和 getch() 的替代方法?的详细内容。更多信息请关注PHP中文网其他相关文章!