Ihre Frage klingt ein wenig verworren. select()
wird verwendet, um die Eingabe zu blockieren, bis sie verfügbar ist. Das eigentliche Lesen erfolgt jedoch mit normalen Dateilesefunktionen (wie read
, fread
, fgetc
, usw.).
Hier ist ein kurzes Beispiel. Es blockiert, bis stdin mindestens ein Zeichen zum Lesen zur Verfügung hat. Solange Sie das Terminal nicht in einen ungekochten Modus schalten, blockiert es natürlich, bis Sie die Eingabetaste drücken, woraufhin alle eingegebenen Zeichen in den Dateipuffer (von einem Terminalpuffer) gespült werden.
#include <stdio.h>
#include <sys/select.h>
int main(void) {
fd_set s_rd, s_wr, s_ex;
FD_ZERO(&s_rd);
FD_ZERO(&s_wr);
FD_ZERO(&s_ex);
FD_SET(fileno(stdin), &s_rd);
select(fileno(stdin)+1, &s_rd, &s_wr, &s_ex, NULL);
return 0;
}
4 Stimmen
Dies ist eine ziemlich schwierige Aufgabe, wenn Sie mit der POSIX-Programmierung im Allgemeinen nicht vertraut sind. Zum einen müssen Sie die Terminalmodi so einstellen, dass das Gerät empfangene Zeichen nicht puffert.
1 Stimmen
Sie brauchen select( ) nicht zu verwenden, es sei denn, es ist Teil einer Hausaufgabe. Sie können einfach fread( STDIN ... ) oder read( STDIN_FILENO ... ) verwenden.
2 Stimmen
Wenn Sie die volle Kontrolle über das Terminal benötigen (Tastendruck usw.), werden Sie höchstwahrscheinlich viel Besser ist es, eine Terminalbibliothek zu verwenden wie ncurses (es gibt auch Windows-Ports).
0 Stimmen
Pete Wilson: fread(stdin ...) kehrt nicht so schnell zurück wie select, wenn eine Nachricht auf einem Socket ankommt, bevor der Benutzer eine Taste drückt. Unter Linux habe ich select verwendet. Unter Windows ist es schwieriger.
0 Stimmen
Können Sie bitte klären, warum Sie Select verwenden müssen, um eine Tastatureingabe zu lesen? Normalerweise sollten Select-Aufrufe verwendet werden, wenn Sie aus einer Reihe von Deskriptoren oder Eingängen lesen müssen, da sie es einem Programm ermöglichen, mehrere Dateideskriptoren zu überwachen und zu warten, bis einer oder mehrere der Dateideskriptoren für eine bestimmte Klasse von E/A-Operationen (z. B. mögliche Eingaben) "bereit" sind.