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 中国語 Web サイトの他の関連記事を参照してください。