Heim  >  Artikel  >  Backend-Entwicklung  >  Wie emuliere ich die Funktionalität „kbhit()“ und „getch()“ unter Linux?

Wie emuliere ich die Funktionalität „kbhit()“ und „getch()“ unter Linux?

Susan Sarandon
Susan SarandonOriginal
2024-10-31 03:45:01278Durchsuche

How to Emulate `kbhit()` and `getch()` Functionality on Linux?

Emulieren der kbhit()- und getch()-Funktionalität unter Linux

Die kbhit()- und getch()-Funktionen werden häufig in Windows verwendet, um Überprüfen Sie die Eingabe, ohne die Ausführung einer Schleife zu unterbrechen. Allerdings werden diese Funktionen auf Linux-Betriebssystemen nicht nativ unterstützt.

Das kbhit()-Äquivalent

Um eine ähnliche Funktionalität unter Linux zu erreichen, können Sie die Implementierung von Morgan Mattews nutzen die Funktion kbhit(). Diese Implementierung ist mit POSIX-kompatiblen Systemen kompatibel und kann hier gefunden werden.

Das getch()-Äquivalent

Da kbhit() die Pufferung auf Termios-Ebene deaktiviert, ist es Behebt auch das getchar()-Problem. Sie können getchar() unverändert verwenden, ohne die Pufferung zu deaktivieren, wie im bereitgestellten Windows-Beispiel.

Kombination beider Funktionen

Sobald Sie die kbhit()-Funktionalität implementiert haben, Sie können das Windows-Beispiel wie folgt an Linux anpassen:

<code class="C++">#include <unistd.h>
#include <iostream>

int main()
{
    while (true)
    {
        if (kbhit())
        {
            int key = getch();
            if (key == 'g')
            {
                std::cout << "You pressed G" << std::endl;
            }
        }
        usleep(500000);
        std::cout << "Running" << std::endl;
    }
}</code>

Das obige ist der detaillierte Inhalt vonWie emuliere ich die Funktionalität „kbhit()“ und „getch()“ unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn