Comment faire pour vider la mémoire tampon du clavier tampon clavier

Exclusion de responsabilité du contenu obsolète de la base de connaissances

Cet article a été rédigé sur les produits pour lesquels Microsoft n’offre plus aucune prise en charge. Par conséquent, cet article est proposé « en l’état » et ne sera plus mis à jour.

Résumé

Pour vider la mémoire tampon du tampon clavier du clavier du BIOS, la fonction de 21 interruption MS-DOS 0CH peut être utilisé. Cette fonction efface le tampon de tampon clavier du clavier et appelle ensuite une fonction de lecture spécifiée dans le Registre AL. Le Registre de AL peut être 0 x 01, 0 x 06, 0 x 07, 0 x 08 ou 0x0A pour spécifier une fonction de lecture valide. Si vous ne souhaitez pas lire après vidage de la mémoire tampon, vous pouvez spécifier un nombre non valide dans AL.


Une autre méthode de vidage de la mémoire tampon du BIOS est d’appeler la getch() de fonction de console d’e/s jusqu'à ce que la fonction kbhit() prend la valeur false. Cette méthode est illustrée dans le programme ci-dessous et a l’avantage d’être utilisable sous OS/2, ainsi que de MS-DOS.

Plus d'informations

La mémoire tampon mise en œuvre par les fonctions d’exécution C pour le flux « stdin » est différente de la mémoire tampon du tampon clavier du clavier du BIOS. Pour effacer la mémoire tampon de stdin, utilisez la fonction fflush(). Toutefois, cette méthode ne sera pas le vidage de la mémoire tampon du BIOS. Pour être entièrement vidé, vous devez vider la mémoire tampon du BIOS comme décrit ci-dessus et appelez le fflush de stdin.


L’exemple de programme suivant est un exemple :

Exemple de Code

/* Compile options needed: none*/ 
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <dos.h>
void main (void)
{
time_t start, work ;
char str [50] ;
puts ("type for getchar(). Go to stdin's buffer.") ;
// user can type more than one character and an Enter.
getchar () ;
puts ("Type fast, 5 seconds. Go to BIOS buffer.") ;
// user can type anything including multiple Enters.
time (&start) ;
work = start ;
while ( (work - start) < 5 ) time (&work) ;
bdos (0xC, 0, 0) ; // clear BIOS keyboard buffer
// Alternative method:
// while (kbhit()) getch();
fflush (stdin) ; // clear stdin's buffer
puts ("Should be waiting again.") ;
gets (str) ;
puts (str) ;
}

Propriétés

ID d'article : 43993 - Dernière mise à jour : 27 janv. 2017 - Révision : 1

Commentaires