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, wobeierrno
gleichEAGAIN
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.