Linux 中的輸入處理:kbhit() 和getch() 的替代方法
在Windows 中,_kbch () 函數提供一種無需停止程序即可檢查鍵盤輸入的簡單方法。然而,這些功能在 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中文網其他相關文章!