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