Linux での入力処理: kbhit() および getch() の代替
Windows では、_kbhit() および _getch() 関数プログラムを停止せずにキーボード入力をチェックする簡単な方法を提供します。ただし、これらの機能は Linux では使用できません。この記事では、Linux で入力を処理するための代替アプローチを検討します。
Morgan Mattews のコード
1 つの解決策は、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 中国語 Web サイトの他の関連記事を参照してください。