Heim >Backend-Entwicklung >C++ >So erreichen Sie eine nicht blockierende Tastatureingabe unter Linux: Eine Anleitung zu kbhit()- und getch()-Äquivalenten
Zugriff auf Tastatureingaben unter Linux mit kbhit()- und getch()-Äquivalenten
Der bereitgestellte Windows-Code nutzt die plattformspezifischen Funktionen _kbhit( ) und _getch(), um Tastatureingaben zu überwachen, ohne die Programmschleife zu unterbrechen. Diese Funktionen sind jedoch auf Linux-Systemen nicht verfügbar, sodass alternative Ansätze erforderlich sind.
POSIX-kompatibles kbhit()-Äquivalent
Wenn Ihrem Linux-System ein conio.h-Header fehlt Wenn Sie kbhit() unterstützen, sollten Sie erwägen, die Implementierung von Morgan Mattews zu nutzen. Diese Lösung emuliert die kbhit()-Funktionalität auf jedem POSIX-kompatiblen System.
Beheben von getchar()-Problemen
Das Deaktivieren der Pufferung auf Termios-Ebene löst nicht nur kbhit() Problem, sondern geht auch auf alle Bedenken im Zusammenhang mit getchar() ein, wie in der bereitgestellten Ressource gezeigt. Dieser Ansatz stellt sicher, dass Eingaben sofort empfangen werden, ohne auf den Tastendruck der Eingabetaste zu warten.
Integration mit Beispielcode
Um den bereitgestellten Beispielcode an Linux-Systeme anzupassen, sollten Sie _kbhit ersetzen () und _getch() mit ihren POSIX-kompatiblen Entsprechungen. Der folgende überarbeitete Code demonstriert diese Integration:
<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>
Dieser modifizierte Code nutzt die kbhit()-Implementierung von Mattews und deaktiviert die Eingabepufferung, um eine ähnliche Funktionalität wie der ursprüngliche Windows-Code zu erreichen.
Das obige ist der detaillierte Inhalt vonSo erreichen Sie eine nicht blockierende Tastatureingabe unter Linux: Eine Anleitung zu kbhit()- und getch()-Äquivalenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!