Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Eingaben verarbeiten und Daten lesen

&pagelevel(5)&pagelevel

Ein Terminal, das einer Gerätedatei zugeordnet ist, kann im Vollduplexbetrieb arbeiten, so dass es jederzeit möglich ist, Zeichen einzugeben, auch bei laufender Ausgabe. Im POSIX-Subsystem wird der Vollduplexbetrieb für Terminals von TIAM simuliert.

Jeder Gerätedatei eines Terminals ist ein Eingabepuffer zugeordnet, in den die eingehenden Daten durch das System gespeichert werden, bevor sie vom Prozess gelesen werden können. Die Eingabe geht verloren, wenn die Eingabepuffer des Systems voll sind oder wenn eine Eingabezeile die zulässige Höchstzahl {MAX_INPUT} für die Eingabe von Zeichen überschreitet (siehe limits.h). {MAX_INPUT} muss größer oder gleich {_POSIX_MAX_CANON} sein. Dieser Wert ist mit pathconf() abfragbar.

Es sind zwei generelle Arten von Eingabeverarbeitung verfügbar, je nachdem, ob die Gerätedatei für das Terminal im Standard-Eingabemodus oder im besonderen Eingabemodus arbeitet. Diese Modi sind in den nächsten beiden Abschnitten „Standard-Eingabeverarbeitung“ und „Besondere Eingabeverarbeitung“ beschrieben. Zusätzlich werden Eingabezeichen entsprechend der Einstellung der Komponenten c_iflag (siehe auch Abschnitt "Eingabemodi“) und c_lflag (siehe auch Abschnitt "Lokalmodi“) verarbeitet. Diese Verarbeitung kann das lokale Echo einschließen. Dies bedeutet, dass Eingabezeichen sofort nach ihrem Empfang an das entsprechende Terminal zurückgesendet werden. Dies ist besonders nützlich für Terminals, die im Vollduplexbetrieb arbeiten.

Wenn das Bit O_NONBLOCK nicht gesetzt ist, werden Leseanforderungen solange blockiert, bis Daten verfügbar sind oder ein Signal eintrifft. Wenn das Bit O_NONBLOCK gesetzt ist, dann wird die Leseanforderung auf eine der folgenden Arten ohne Warten beendet:

  • Sind genügend Daten verfügbar, um die konkrete Anforderung zu erfüllen, dann kehrt die Funktion read() erfolgreich zurück und liefert als Ergebnis die Anzahl der gelesenen Bytes.

  • Wenn nicht genügend Daten verfügbar sind, um die konkrete Anforderung zu erfüllen, dann kehrt die Funktion read() erfolgreich zurück. Dabei hat sie so viele Daten wie möglich gelesen. Sie liefert als Ergebnis die Anzahl der tatsächlich gelesenen Bytes zurück.

  • Sind keine Daten verfügbar, dann liefert die Funktion read() den Wert -1, wobei errno gleich EAGAIN gesetzt ist.

Wann Daten verfügbar sind, hängt davon ab, ob die Standard- oder die besondere Eingabeverarbeitung aktiv ist. Die folgenden Abschnitte „Standard-Eingabeverarbeitung“ und „Besondere Eingabeverarbeitung“ beschreiben jeden dieser Eingabeverarbeitungs-Modi.