Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Besondere Eingabeverarbeitung

&pagelevel(5)&pagelevel

Diese Art der Eingabeverarbeitung wird nur von zeichenorientierten Terminals, nicht aber von Blockterminals unterstützt.

Bei der besonderen Eingabeverarbeitung werden die Eingabezeichen nicht zu Zeilen zusammengefasst und eine Verarbeitung von ERASE- und KILL-Zeichen findet nicht statt. Die Werte der Elemente MIN und TIME des Vektors c_cc werden verwendet, um zu entscheiden, wie der Prozess die Zeichen erhalten soll. Das O_NONBLOCK-Bit (siehe auch open() oder fcntl()) hat Vorrang vor den Festlegungen im Vektor c_cc . Wenn daher O_NONBLOCK gesetzt ist, kehrt read() sofort zurück, unabhängig von den MIN- und TIME-Werten. Außerdem kann read(), wenn keine Daten vorhanden sind, entweder 0 oder -1 zurückgeben und in letzterem Fall errno gleich EAGAIN setzen.

MIN gibt die Mindestanzahl an Zeichen (maximal 255) an, die bei einer erfolgreich ausgeführten Funktion read() empfangen werden sollten (d.h. die dann dem Benutzer zurückgeliefert werden). TIME ist ein Timer (eine Zeitüberwachung) auf Zehntelsekunden-Basis für schubweise und geringe Datenübertragungen. Wenn MIN größer als {MAX_INPUT} ist, dann ist nicht festgelegt, wie die Anforderung behandelt wird. Die folgenden Absätze beschreiben die vier möglichen Kombinationen von MIN und TIME sowie ihre Wechselwirkung:

1. Fall: MIN > 0, TIME > 0

In diesem Fall dient TIME als zeichenorientierter Timer und wird nach dem ersten empfangenen Zeichen aktiviert. Bei jedem neuen Zeichen wird TIME zurückgesetzt; sobald ein Zeichen empfangen wird, wird TIME gestartet. Werden MIN Zeichen empfangen, bevor der Timer TIME abgelaufen ist, so wird der Leseauftrag erfüllt. Läuft der Timer TIME ab, bevor MIN Zeichen empfangen wurden, so werden die bis zu diesem Zeitpunkt empfangenen Zeichen an den Benutzer übergeben. Es wird immer mindestens ein Zeichen zurückgeliefert, wenn TIME abläuft, da der Timer erst nach dem Empfang des ersten Zeichens aktiviert wird. In diesem Fall blockiert die Leseoperation solange, bis entweder der MIN- und TIME-Mechanismus durch den Empfang des ersten Bytes aktiviert wird oder ein Signal eintrifft.

2. Fall: MIN > 0, TIME = 0

Da TIME den Wert 0 hat, ist die Zeitüberwachung wirkungslos und nur MIN ist signifikant. In diesem Fall blockiert die Leseoperation solange, bis MIN Zeichen empfangen wurden oder bis ein Signal eintrifft. Ein Programm, das diesen Fall nutzt, um Datensätze von einem Terminal zu lesen, kann bei einer Leseoperation beliebig lange blockieren (d.h. auch unendlich lange).

3. Fall: MIN = 0, TIME > 0

Da MIN gleich 0 ist, dient TIME nicht mehr als zeichenorientierter Timer, sondern als Zeitüberwachung für die gesamte Leseoperation, die bei der Bearbeitung des read()-Aufrufs aktiviert wird (Standardbehandlung). In diesem Fall wird eine Leseoperation ausgeführt, sobald entweder ein Zeichen empfangen wird oder der Timer TIME abläuft. Wenn innerhalb des Zeitraums von TIME * 0,1 Sekunden nach dem Aufruf von read() kein Byte empfangen wird, dann liefert die Funktion read() das Ergebnis 0 und hat keine Daten gelesen.

4. Fall: MIN = 0, TIME = 0

In diesem Fall wird sofort die geforderte Anzahl von zu lesenden Zeichen zurückgeliefert oder, wenn nicht so viele verfügbar sind, die Anzahl der aktuell verfügbaren Zeichen. Es wird nicht auf eine weitere Eingabe gewartet. Sind keine Eingabezeichen verfügbar, dann liefert die Funktion read() den Wert 0 als Ergebnis und hat keine Daten gelesen.