Cómo vaciar el búfer de escritura anticipada del teclado

Exención de responsabilidades de contenido KB retirado

Este artículo se refiere a productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Resumen

Para vaciar el búfer de escritura anticipada de teclado de BIOS, puede utilizarse la función de MS-DOS interrupción 21 de 0CH. Esta función borra el búfer de escritura anticipada de teclado y, a continuación, invoca una función de lectura especificada en el registro AL. El registro AL puede ser 0 x 01, 0 x 06, 0 x 07, 0 x 08 o 0x0A para especificar una función de lectura válido. Si no desea leer después de vaciar el búfer, puede especificar un número no válido en AL.


Otro método para vaciar el búfer de BIOS es llamar a la getch() de función de E/S de consola hasta que la función kbhit() se convierte en false. Este método se muestra en el programa a continuación y tiene la ventaja de ser utilizada en OS/2, así como en MS-DOS.

Más información

El búfer de implementada por las funciones de tiempo de ejecución de C para la secuencia "stdin" es diferente del búfer de escritura anticipada de teclado de BIOS. Para borrar el búfer para stdin, utilice la función fflush(). Sin embargo, este método no vaciará el búfer de BIOS. Para estar totalmente vacía, debe vaciar el búfer de BIOS como se describió anteriormente y llame a fflush para stdin.


El programa de ejemplo siguiente es un ejemplo:

Código de ejemplo

/* 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) ;
}

Propiedades

Id. de artículo: 43993 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios