Wie benutzt man select (), um Eingaben von der Tastatur in C zu lesen

8

Ich versuche select () zu verwenden, um Tastatureingaben zu lesen, und ich steckte fest darin, dass ich nicht weiß, wie man von der Tastatur liest und einen Dateideskriptor dafür benutzt. Mir wurde gesagt, STDIN und STDIN_FILENO zu benutzen, um dieses Problem anzugehen, aber ich bin immer noch verwirrt.
Wie kann ich es tun?

    
drum 20.06.2011, 22:17
quelle

3 Antworten

5

Ihre Frage klingt ein wenig verwirrt. select() wird verwendet, um zu blockieren, bis die Eingabe verfügbar ist. Aber Sie tun das eigentliche Lesen mit normalen Datei-Lesefunktionen (wie read , fread , fgetc , usw.).

Hier ist ein kurzes Beispiel. Es blockiert, bis Stdin mindestens ein Zeichen zum Lesen zur Verfügung hat. Aber natürlich, wenn Sie das Terminal nicht in einen ungekochten Modus ändern, blockiert es, bis Sie die Eingabetaste drücken, wenn eingegebene Zeichen in den Dateipuffer (aus einem Terminalpuffer) geleert werden.

%Vor%     
luser droog 21.06.2011, 02:36
quelle
4

Wie bereits erwähnt, können Sie mit auswählen einfach z. stdin, um zu prüfen, ob die Eingabedaten bereits zum Lesen verfügbar sind oder nicht. Wenn es verfügbar ist, können Sie dann z.B. fgets , um Eingabedaten sicher in einen Puffer einzulesen, wie unten gezeigt:

%Vor%     
jwaliszko 02.09.2013 13:29
quelle
1

Vielleicht möchten Sie die Tastatureingabe auf "WINDOWS" sehen? Unter Windows kann das Ergebnis von select () für STDIN nicht abgerufen werden. Sie sollten PeekConsoleInput () verwenden. Und benutze handle of stdin wie folgt.

%Vor%

stdin kann zu einer Pipe-Eingabe werden. Wenn ja, erhalten Sie keine Tastatureingabe.

P.S. Wenn Sie nicht nach Windows fragen, entschuldigen Sie viel.

    
mattn 21.06.2011 03:14
quelle