Maison > développement back-end > C++ > le corps du texte

Comment obtenir une saisie clavier non bloquante sous Linux : un guide des équivalents de kbhit() et getch()

Susan Sarandon
Libérer: 2024-10-29 01:11:30
original
673 Les gens l'ont consulté

How to Achieve Non-Blocking Keyboard Input in Linux: A Guide to kbhit() and getch() Equivalents

Accès à la saisie au clavier sous Linux à l'aide des équivalents kbhit() et getch()

Le code Windows fourni utilise les fonctions spécifiques à la plate-forme _kbhit( ) et _getch() pour surveiller la saisie au clavier sans interrompre la boucle du programme. Cependant, ces fonctions ne sont pas disponibles sur les systèmes Linux, ce qui nécessite des approches alternatives.

Équivalent kbhit() conforme à POSIX

Si votre système Linux ne dispose pas d'un en-tête conio.h qui prend en charge kbhit(), envisagez de tirer parti de l'implémentation de Morgan Mattews. Cette solution émule la fonctionnalité kbhit() sur n'importe quel système compatible POSIX.

Résoudre les problèmes de getchar()

La désactivation de la mise en mémoire tampon au niveau termios ne résout pas seulement le kbhit() problème, mais répond également à toutes les préoccupations liées à getchar() comme démontré dans la ressource fournie. Cette approche garantit que l'entrée est reçue immédiatement sans attendre la pression sur la touche Entrée.

Intégration avec un exemple de code

Pour adapter l'exemple de code fourni aux systèmes Linux, envisagez de remplacer _kbhit () et _getch() avec leurs équivalents compatibles POSIX. Ce code révisé ci-dessous démontre cette intégration :

<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>
Copier après la connexion

Ce code modifié utilise l'implémentation kbhit() de Mattews et désactive la mise en mémoire tampon d'entrée pour obtenir des fonctionnalités similaires à celles du code Windows d'origine.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!