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

Comment gérer les entrées sous Linux : une alternative à kbhit() et getch() ?

Patricia Arquette
Libérer: 2024-10-28 05:43:30
original
469 Les gens l'ont consulté

How to Handle Input in Linux: An Alternative to kbhit() and getch()?

Gestion des entrées sous Linux : une alternative à kbhit() et getch()

Sous Windows, fonctions _kbhit() et _getch() fournit un moyen simple de vérifier la saisie au clavier sans arrêter le programme. Cependant, ces fonctions ne sont pas disponibles sous Linux. Cet article explore une approche alternative pour gérer les entrées sous Linux.

Code de Morgan Mattews

Une solution consiste à utiliser le code fourni par Morgan Mattews, qui émule la fonctionnalité de _kbhit() d'une manière conforme à POSIX. Cela implique de désactiver la mise en mémoire tampon au niveau termios.

Problème getchar()

La désactivation de la mise en mémoire tampon termios résout non seulement l'absence de _kbhit() mais résout également le problème getchar() en empêchant la mise en mémoire tampon des entrées.

Exemple

<code class="c">#include <stdio.h>
#include <termios.h>

int kbhit() {
    struct termios oldt, newt;
    int ch;
    int oldf;

    tcgetattr(STDIN_FILENO, &oldt);
    newt = oldt;
    newt.c_lflag &= ~(ICANON | ECHO);
    tcsetattr(STDIN_FILENO, TCSANOW, &newt);
    oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
    fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);

    ch = getchar();

    tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
    fcntl(STDIN_FILENO, F_SETFL, oldf);

    if (ch != EOF) {
        ungetc(ch, stdin);
        return 1;
    }

    return 0;
}

int main() {
    while (true) {
        if (kbhit()) {
            char c = getchar();
            if (c == 'g') {
                printf("You pressed G\n");
            }
        }
        printf("Running\n");
        sleep(1);
    }

    return 0;
}</code>
Copier après la connexion

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!