Τρόπος για να κάνετε εκκαθάριση του Buffer Typeahead πληκτρολογίου

Αποποίηση ευθυνών για περιεχόμενο της Γνωσιακής βάσης που έχει αποσυρθεί

Αυτό το άρθρο αφορά προϊόντα για τα οποία η Microsoft δεν παρέχει πλέον υποστήριξη. Συνεπώς, το παρόν άρθρο παρέχεται "ως έχει" και δεν θα ενημερώνεται πλέον.

Σύνοψη

Για να κάνετε εκκαθάριση του buffer typeahead πληκτρολογίου BIOS, μπορεί να χρησιμοποιηθεί η συνάρτηση 21 διακοπής MS-DOS 0CH. Η λειτουργία αυτή πραγματοποιεί εκκαθάριση του buffer typeahead πληκτρολογίου και, στη συνέχεια, εκτελεί μια λειτουργία ανάγνωσης που καθορίζεται στο μητρώο AL. Το μητρώο AL μπορεί να είναι 0x01, 0x06, 0x07, 0x08 ή 0x0A για να καθορίσετε μια έγκυρη ανάγνωσης λειτουργία. Εάν δεν σκοπεύετε να διαβάσετε μετά την εκκαθάριση του buffer, μπορείτε να καθορίσετε έναν μη έγκυρο αριθμό στο AL.


Μια άλλη μέθοδος για την εκκαθάριση του buffer του BIOS είναι να καλέσετε το getch() λειτουργία I/O κονσόλας, μέχρι να γίνει ψευδής η συνάρτηση kbhit(). Αυτή η μέθοδος έχει αποδειχθεί στο πρόγραμμα παρακάτω και έχει το πλεονέκτημα ότι μπορεί να χρησιμοποιηθεί στην περιοχή OS/2, καθώς και MS-DOS.

Περισσότερες πληροφορίες

Το buffer που εφαρμόζονται από τις συναρτήσεις χρόνου εκτέλεσης C για τη ροή "stdin" είναι διαφορετικό από το buffer typeahead πληκτρολογίου του BIOS. Για να απαλείψετε το buffer για stdin, χρησιμοποιήστε τη συνάρτηση fflush(). Ωστόσο, αυτή η μέθοδος δεν θα εκκαθάριση του buffer του BIOS. Να καταγραφούν πλήρως, πρέπει τόσο εκκαθάριση του buffer του BIOS, όπως περιγράφεται παραπάνω και καλέστε fflush για stdin.


Το παρακάτω δείγμα προγράμματος είναι ένα παράδειγμα:

Δείγμα κώδικα

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

Ιδιότητες

Αναγνωριστικό άρθρου: 43993 - Τελευταία αναθεώρηση: 17 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια