Maison  >  Article  >  développement back-end  >  Comment émuler les fonctionnalités `kbhit()` et `getch()` sous Linux ?

Comment émuler les fonctionnalités `kbhit()` et `getch()` sous Linux ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 03:45:01276parcourir

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

Émulation des fonctionnalités kbhit() et getch() sous Linux

Les fonctions kbhit() et getch() sont couramment utilisées dans Windows pour vérifier l'entrée sans interrompre l'exécution d'une boucle. Cependant, ces fonctions ne sont pas nativement prises en charge sur les systèmes d'exploitation Linux.

L'équivalent kbhit()

Pour obtenir des fonctionnalités similaires sous Linux, vous pouvez utiliser l'implémentation de Morgan Mattews de la fonction kbhit(). Cette implémentation est compatible avec les systèmes compatibles POSIX et peut être trouvée ici.

L'équivalent getch()

Puisque kbhit() désactive la mise en mémoire tampon au niveau termios, il résout également le problème getchar(). Vous pouvez utiliser getchar() tel quel sans désactiver la mise en mémoire tampon comme dans l'exemple Windows fourni.

Combiner les deux fonctions

Une fois que vous avez implémenté la fonctionnalité kbhit(), vous pouvez adapter l'exemple Windows à Linux comme suit :

<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>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn