termio(7) termio(7)
NAME
termio - Allgemeine Terminal-Schnittstelle
SYNTAX
#include <termio.h>
ioctl(int fildes, int request, struct termio *arg);
ioctl(int fildes, int request, int arg);
#include <termios.h>
ioctl(int fildes, int request, struct termios *arg);
BESCHREIBUNG
Reliant UNIX unterstützt eine allgemeine, hardwareunabhängige Schnitt-
stelle für asynchrone Anschlüsse. Der Benutzer kann auf diese Einrich-
tung über Funktionsaufrufe zugreifen, die unter termios(3C) und in
diesem Abschnitt unter der Überschrift IOCTL-FUNKTIONSAUFRUFE
beschrieben werden. Außerdem werden in diesem Abschnitt die allgemei-
nen Terminal-Subsysteme beschrieben, die für beide Benutzerschnitt-
stellen von Bedeutung sind.
Eine Terminal-Datei weist den Prozeß nach dem Öffnen normalerweise an,
auf den Aufbau einer Verbindung zu warten. In Wirklichkeit werden
Terminal-Dateien nur selten durch Benutzerprogramme geöffnet; statt
dessen werden sie durch das System geöffnet und dann als Standardein-
gabe-, Ausgabe- und Fehlerdateien des Benutzers verwendet. Die alle-
rerste Terminal-Datei, die vom Session-Leader geöffnet wird und nicht
bereits einer Sitzung zugeordnet ist, wird zum Steuerungsterminal für
diese Sitzung. Das Steuerungsterminal übernimmt bei der Behandlung der
Abbruch- und Unterbrechungssignale eine spezielle Funktion (siehe
unten). Das Steuerungsterminal wird bei einem fork(2)-Systemaufruf von
einem Sohnprozeß übernommen. Ein Prozeß kann diese Zuordnung auflösen,
indem er seine Sitzung mit setsid(2) wechselt.
Ein Terminal, das einer dieser Dateien zugeordnet ist, läuft normaler-
weise im Vollduplex-Betrieb. Es können jederzeit, sogar während gerade
eine Ausgabe läuft, Zeichen eingegeben werden. Die Zeichen gehen nur
verloren, wenn die Eingabepuffer des Systems vollständig gefüllt sind.
Dies kommt aber nur selten vor, z. B. wenn die Anzahl der Zeichen im
Leitungsprozeduren-Puffer die Werte {MAXCANON} und IMAXBEL [siehe
unten] übersteigt oder der Benutzer {MAXINPUT} Eingabezeichen zusam-
menkommen ließ, die noch nicht von einem Programm eingelesen worden
sind. Wenn der Eingabepuffer voll ist, werden sämtliche Zeichen, die
bis zu diesem Zeitpunkt im Puffer zwischengespeichert worden sind,
stillschweigend gelöscht.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
Sitzungsverwaltung (Auftragssteuerung)
Ein Steuerungsterminal erkennt eine der Prozeßgruppen in der Sitzung,
die ihm zugeordnet ist, als Vordergrund-Prozeßgruppe. Alle anderen
Prozesse in der Sitzung erhalten den Status einer Hintergrund-Prozeß-
gruppe. Die Vordergrund-Prozeßgruppe übernimmt bei der Behandlung von
signalgenerierenden Eingabezeichen eine spezielle Funktion (siehe
unten). Einem Steuerungsterminal wird beim Einrichten standardmäßig
die Prozeßgruppe des Steuerungsprozesses als Vordergrund-Prozeßgruppe
zugeordnet.
Für Hintergrund-Prozeßgruppen in der Sitzung des Steuerungsprozesses
wird beim Versuch, auf ihr Steuerungsterminal zuzugreifen, eine
Auftragssteuerungs-Leitungsprozedur aktiviert. An Prozeßgruppen können
Signale übermittelt werden, die zu ihrer Beendigung führen, wenn keine
andere Vorgehensweisen festgelegt worden sind. Eine Ausnahme stellen
Mitglieder von verwaisten Prozeßgruppen dar. Dabei handelt es sich um
Prozeßgruppen, die kein Mitglied mit einem Vaterprozeß in einer ande-
ren Prozeßgruppe mit derselben Sitzungsnummer und somit demselben
Steuerungsterminal haben. Wenn die verwaiste Prozeßgruppe eines Mit-
glieds versucht, auf ihr Steuerungsterminal zuzugreifen, werden Fehler
zurückgegeben - schließlich gibt es keinen Prozeß, der weiterhin aktiv
sein könnte, falls die Prozeßgruppe beendet würde.
Wenn ein Mitglied einer Hintergrund-Prozeßgruppe versucht, Daten von
seinem Steuerungsterminal einzulesen, wird an seine Prozeßgruppe ein
SIGTTIN-Signal übermittelt, das im Normalfall zur Beendigung der Mit-
glieder dieser Prozeßgruppe führt. Wenn der Prozeß das SIGTTIN-Signal
dagegen ignoriert oder blockiert oder er ein Mitglied einer verwaisten
Prozeßgruppe ist, wird die Leseoperation mit einem Fehler abgebrochen,
wobei errno auf EIO gesetzt wird; es wird dann kein Signal übermit-
telt.
Wenn ein Mitglied einer Hintergrund-Prozeßgruppe versucht, auf sein
Steuerungsterminal zu schreiben, und das TOSTOP-Bit im Feld clflag
gesetzt ist, erhält seine Prozeßgruppe ein SIGTTOU-Signal, das norma-
lerweise zur Beendigung der Mitglieder dieser Prozeßgruppe führt. Wenn
der Prozeß das SIGTTOU-Signal dagegen ignoriert oder blockiert, kann
der Schreibzugriff erfolgreich durchgeführt werden. Wenn der Prozeß
das SIGTTOU-Signal weder ignoriert noch blockiert und ein Mitglied
einer verwaisten Prozeßgruppe ist, wird die Schreiboperation mit einem
Fehler abgebrochen, wobei errno auf EIO gesetzt ist; es wird dann kein
Signal übermittelt.
Wenn TOSTOP gesetzt ist und ein Mitglied einer Hintergrund-Prozeß-
gruppe einen ioctl-Funktionsaufruf für sein Steuerungsterminal ver-
sucht und dieser ioctl-Funktionsaufruf Terminal-Parameter ändert
(dabei kann es sich z. B. um TCSETA, TCSETAW, TCSETAF oder TIOCSPGRP
handeln), wird an seine Prozeßgruppe ein SIGTTOU-Signal übermittelt,
das normalerweise zur Beendigung der Mitglieder dieser Prozeßgruppe
führt. Wenn der Prozeß das SIGTTOU-Signal dagegen ignoriert oder blok-
kiert, kann der ioctl-Funktionsaufruf erfolgreich durchgeführt werden.
Wenn der Prozeß das SIGTTOU-Signal weder ignoriert noch blockiert und
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
er ein Mitglied einer verwaisten Prozeßgruppe ist, wird die Schreib-
operation mit einem Fehler abgebrochen, wobei errno auf EIO gesetzt
ist; es wird dann kein Signal übermittelt.
Standardmäßige ("kanonische") Verarbeitung der Eingabe
Die Terminal-Eingabe wird normalerweise zeilenweise verarbeitet. Eine
Zeile wird durch ein Zeilenendezeichen (ASCII LF bzw. EOL) oder ein
Dateiende-Zeichen (ASCII EOT) abgeschlossen. Somit wird das Programm,
das einen Lesezugriff versucht, so lange angehalten, bis eine ganze
Zeile eingegeben worden ist. Außerdem wird maximal eine Zeile zurück-
gegeben, unabhängig davon, wie viele Zeichen im Leseaufruf angefordert
worden sind. Allerdings ist es nicht notwendig, eine vollständige
Zeile auf einmal einzulesen; bei einem Lesezugriff kann eine beliebige
Anzahl von Zeichen (auch nur ein einziges Zeichen) ohne Informations-
verlust angefordert werden.
Das ERASE- und das KILL-Zeichen wird während der Eingabe wie üblich
verarbeitet. Das ERASE-Zeichen (Standard: das Nummern-Zeichen #)
bewirkt das Löschen des zuletzt eingegebenen Zeichens. Das WERASE-
Zeichen (das Zeichen CTRL-W) löscht das letzte "Wort", das in der
aktuellen Eingabezeile eingegeben wurde (allerdings ohne vorange-
stellte Leer- oder Tabulatorzeichen). Ein "Wort" ist als eine Folge
von Zeichen definiert, wobei es sich nicht um Leerzeichen handeln
darf; Tabulatorzeichen werden als Leerzeichen gezählt. Weder mit dem
ERASE- noch mit dem WERASE-Zeichen kann über den Zeilenanfang hinweg
gelöscht werden. Das KILL-Zeichen (Standard: das Zeichen @) löscht die
gesamte Eingabezeile und gibt gegebenenfalls ein Zeilenendezeichen
aus. Alle genannten Zeichen werden über einen Tastenanschlag gene-
riert; Rückschritt- oder Tabulatorzeichen, die zuvor eingegeben worden
sind, haben dabei keinerlei Auswirkungen. Das REPRINT-Zeichen (CTRL-R)
gibt ein Zeilenendezeichen aus, gefolgt von allen Zeichen, die noch
nicht eingelesen worden sind. Die erneute Ausgabe wird auch dann auto-
matisch durchgeführt, wenn Zeichen, die normalerweise vom Bildschirm
gelöscht würden, mit einer Programmausgabe kollidieren. Die Zeichen
werden erneut ausgegeben, als wäre die Echo-Funktion aktiv; wenn ECHO
somit nicht gesetzt ist, werden sie nicht ausgegeben.
Die Zeichen ERASE und KILL können direkt eingegeben werden, indem
ihnen das Escape-Zeichen (\) vorangestellt wird. In diesem Fall wird
das Escape-Zeichen nicht eingelesen. Das ERASE- und KILL-Zeichen kann
geändert werden.
Verzögerungsfreie Verarbeitung der Eingabe
Bei der verzögerungsfreien ("nichtkanonischen") Verarbeitung der Ein-
gabe werden die Eingabezeichen nicht zu Zeilen zusammengefaßt und die
ERASE- und KILL-Zeichen nicht verarbeitet. Die Verarbeitung der Emp-
fangsdaten wird über die Werte von MIN und TIME gesteuert.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
MIN steht für die Anzahl der Zeichen, nach deren Empfang eine Lesean-
forderung frühestens erfüllt wird (d. h., die Zeichen zum Benutzer
zurückgegeben werden). TIME ist ein im 0,10-Sekunden-Takt arbeitender
Zeitgeber, mit dem eine Zeitüberschreitung bei diskontinuierlichen und
kurzfristigen Datenübertragungen angezeigt wird. Die vier möglichen
Werte für MIN und TIME und ihre gegenseitigen Abhängigkeiten werden
nachfolgend beschrieben.
Fall A: MIN > 0, TIME > 0
In diesem Fall fungiert TIME als "Intercharacter-Timer", der nach
dem Empfang des ersten Zeichens aktiviert wird. Wegen seiner
Funktion als Intercharacter-Timer wird er nach dem Empfang eines
Zeichens zurückgesetzt. Das Zusammenspiel zwischen MIN und TIME
sieht folgendermaßen aus: Sobald ein Zeichen empfangen wird, wird
der Intercharacter-Timer gestartet. Wenn MIN Zeichen vor dem
Ablaufen des Intercharacter-Timer empfangen werden (beachten Sie,
daß der Intercharacter-Timer nach dem Empfang jedes Zeichens
zurückgesetzt wird), wird die Leseanforderung erfüllt. Wenn der
Intercharacter-Timer vor dem Empfang von MIN Zeichen abläuft,
werden die bis zu diesem Zeitpunkt empfangenen Zeichen an den
Benutzer zurückgegeben. Beachten Sie, daß beim Ablaufen von TIME
mindestens ein Zeichen zurückgegeben wird (der Intercharacter-
Timer wäre ohne den Empfang eines Zeichens überhaupt nicht akti-
viert worden). In diesem Fall (MIN > 0, TIME > 0) wird die Lese-
anforderung so lange angehalten, bis die MIN- und TIME-Mechanis-
men durch den Empfang des ersten Zeichens aktiviert werden. Wenn
die Anzahl der eingelesenen Zeichen unter der Anzahl der verfüg-
baren Zeichen liegt, wird der Intercharacter-Timer nicht reakti-
viert, und die nachfolgende Leseanforderung wird sofort erfüllt.
Fall B: MIN > 0, TIME = 0
Da der Wert von TIME in diesem Fall null ist, spielt der Inter-
character-Timer keine Rolle; nur MIN ist signifikant. Eine anste-
hende Leseanforderung wird erst nach dem Empfang von MIN Zeichen
befriedigt (die anstehende Leseanforderung wird angehalten, bis
MIN Zeichen empfangen worden sind). Ein Programm, das diese Kon-
stellation zum Lesen von satzorientierten Terminal-Ein-/Ausgaben
nutzt, kann durch die Leseoperation unendlich lange blockiert
werden.
Fall C: MIN = 0, TIME > 0
Da MIN = 0, ist TIME nicht mehr ein Intercharacter-Timer; statt
dessen fungiert es jetzt als Zeitgeber für Leseoperationen, der
unmittelbar nach einem read-Systemaufruf aktiviert wird. Eine
Leseanforderung wird erfüllt, sobald ein Einzelzeichen empfangen
wurde oder der Zeitgeber für Leseanforderungen abläuft. In diesem
Fall ist zu beachten, daß nach dem Ablaufen des Zeitgebers kein
Zeichen zurückgegeben wird. Wenn der Zeitgeber nicht abläuft,
kann die Leseanforderung nur befriedigt werden, wenn ein Zeichen
empfangen wird. In diesem Fall wird die Leseanforderung beim War-
ten auf ein Zeichen nicht unendlich blockiert; wenn innerhalb von
TIME*0,10 Sekunden nach der Leseanforderung keine Zeichen
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
empfangen werden, wird die Leseanforderung mit null zurückgegebe-
nen Zeichen abgebrochen.
Fall D: MIN = 0, TIME = 0
In diesem Fall findet sofort eine Rückkehr statt. Es wird die
Mindestzahl der angeforderten Zeichen oder der aktuell verfügba-
ren Zeichen zurückgegeben, ohne daß auf die Eingabe weiterer Zei-
chen gewartet würde.
Vergleich der verschiedenen Möglichkeiten eines Zusammenspiels von MIN und TIME
In bezug auf MIN und TIME ist noch auf einige Punkte hinzuweisen:
1. Die im folgenden dargestellten Abhängigkeiten zwischen MIN und TIME
sind nicht umkehrbar. So hat TIME keinerlei Auswirkungen, wenn MIN
> 0 und TIME = 0 ist. Im umgekehrten Fall dagegen, d. h. MIN = 0
und TIME > 0, sind sowohl MIN als auch TIME signifikant, da MIN
beim Empfang eines Einzelzeichens erfüllt ist.
2. TIME stellt im Fall A (MIN > 0, TIME > 0) einen Intercharacter-
Timer dar, im Fall C (TIME = 0, TIME > 0) dagegen einen Zeitgeber
für Leseanforderungen.
Diese beiden Punkte zeigen den doppelten Zweck des MIN/TIME-Mechanis-
mus auf. In Fall A und B mit MIN > 0 dient der Mechanismus zur Verar-
beitung von im Blockbetrieb durchgeführten Übertragungen (z. B.
Dateiübertragungen), bei denen ein Programm mindestens MIN Zeichen
gleichzeitig verarbeiten möchte. In Fall A stellt die Aktivierung des
Intercharacter-Timers durch den Benutzer eine Sicherheitsvorkehrung
dar; in Fall B wird der Intercharacter-Timer deaktiviert.
In den Fällen C und D dient der Mechanismus zur Verarbeitung von zei-
chenweisen, über Zeitgeber gesteuerten Übertragungen. Diese Fälle kön-
nen einfach für bildschirmorientierte Anwendungen genutzt werden, die
vor dem Neuaufbau der Bildschirmanzeige wissen müssen, ob ein Zeichen
in der Eingabewarteschlange vorhanden ist. In Fall C wird die Leseope-
ration im Gegensatz zu Fall D über einen Zeitgeber gesteuert.
Zu beachten ist außerdem, daß MIN in jedem Fall lediglich einen Min-
destwert darstellt. Es steht nicht für die Länge eines Datensatzes.
Wenn ein Programm beispielsweise 20 Byte einliest, wobei MIN den Wert
10 hat und 25 Zeichen vorhanden sind, so werden 20 Zeichen an den
Benutzer zurückgegeben.
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
Schreiben von Zeichen
Wenn ein oder mehrere Zeichen geschrieben werden, werden sie an das
Terminal übermittelt, sobald die Eingabe der zuvor geschriebenen Zei-
chen beendet ist. Die Eingabezeichen werden bei aktivem Echo sofort
auf dem Bildschirm wiedergegeben. Wenn die Zeichen durch einen Prozeß
schneller generiert werden, als sie eingegeben werden können, wird der
Prozeß angehalten, sobald die Anzahl der Zeichen in seiner Ausgabewar-
teschlange einen bestimmten Höchstwert übersteigt. Sobald die Anzahl
der Zeichen in der Warteschlange wieder unter eine bestimmte Schwelle
sinkt, wird die Programmausführung fortgesetzt.
Sonderzeichen
Einige Sonderzeichen haben spezielle Funktionen bei der Eingabe. Die
nachfolgende Auflistung enthält diese Funktionen sowie die Zeichen,
durch die sie standardmäßig generiert werden.
INTR (Rubout bzw. ASCII DEL) Generiert ein SIGINT-Signal. SIGINT
wird an alle häufig wiederkehrenden Prozesse übermittelt, die
dem Steuerungsterminal zugeordnet sind. Im Normalfall wird
die Beendigung sämtlicher derartiger Prozesse erzwungen; es
können allerdings Vorkehrungen getroffen werden, daß das Sig-
nal entweder ignoriert oder an einer bestimmten Stelle abge-
fangen wird [siehe signal(5)].
QUIT (CTRL-| bzw. ASCII FS) Generiert ein SIGQUIT-Signal. Dieses
Signal wird exakt wie das Unterbrechungssignal behandelt, es
sei denn, der empfangende Prozeß hat andere Vorkehrungen
getroffen; in diesem Fall bewirkt es nicht nur die Beendigung
des Prozesses, sondern auch das Anlegen einer Speicherabzugs-
datei (Name: core) im aktuellen Verzeichnis.
ERASE (#) Löscht das unmittelbar vorhergehende Zeichen. Es kann
nicht über den Zeilenanfang hinaus gelöscht werden (als Zei-
lenabschluß gilt NL, EOF, EOL oder EOL2).
WERASE (CTRL-W bzw. ASCII ETX) Löscht das vorangehende "Wort". Es
kann nicht über den Zeilenanfang hinaus gelöscht werden (als
Zeilenabschluß gilt NL, EOF, EOL oder EOL2).
KILL (@) Löscht die gesamte Zeile (als Zeilenabschluß gilt NL,
EOF, EOL oder EOL2).
REPRINT (CTRL-R bzw. ASCII DC2) Gibt alle noch nicht eingelesenen
Zeichen erneut aus und stellt ihnen ein Zeilenendezeichen
voran.
EOF (CTRL-D bzw. ASCII EOT) Generiert ein Dateiendezeichen von
einem Terminal aus. Beim Empfang werden sämtliche zum Einle-
sen anstehenden Zeichen direkt an das Programm übermittelt,
ohne auf ein Zeilenendezeichen zu warten. Das EOF-Zeichen
wird gelöscht. Wenn somit keine Zeichen anstehen (d. h. EOF-
Zeichen am Zeilenanfang), werden Null-Zeichen
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
zurückgeschickt, also die Standard-Dateiendezeichen. Wenn ihm
kein Escape-Zeichen vorangestellt ist, wird das EOF-Zeichen
nicht auf dem Bildschirm ausgegeben. Da EOT das Standard-
EOF-Zeichen ist, wird dadurch der Verbindungsabbruch durch
Terminals verhindert, die auf EOT reagieren.
NL (ASCII LF) Der normale Zeilenbegrenzer. Er darf weder geän-
dert noch mit einem Escape-Zeichen versehen werden.
EOL (ASCII NULL) Zusätzlicher Zeilenbegrenzer mit der gleichen
Funktion wie NL. Er wird normalerweise nicht benutzt.
EOL2 ist ein weiterer Zeilenbegrenzer.
SWTCH (CTRL-Z bzw. ASCII EM) Wird nur benutzt, wenn eine shl-
Schicht aktiv ist.
SUSP (CTRL-Z bzw. ASCII SUB) Generiert ein SIGTSTP-Signal. SIGTSTP
hält sämtliche Prozesse an, die in der Vordergrund-Prozeß-
gruppe für dieses Terminal enthalten sind.
DSUSP (CTRL-Y bzw. ASCII EM) Generiert wie SUSP ein SIGTSTP-Signal;
das Signal wird jedoch nur übermittelt, wenn ein Prozeß in
der Vordergrund-Prozeßgruppe das Zeichen DSUSP einzulesen
versucht, und nicht wenn es eingegeben wird.
STOP (CTRL-S bzw. ASCII DC3) Kann zum vorübergehenden Anhalten der
Ausgabe benutzt werden. Damit kann auf CRT-Terminals verhin-
dert werden, daß die Ausgabe zu schnell über den Bildschirm
läuft. Wenn die Ausgabe angehalten worden ist, werden STOP-
Zeichen ignoriert und nicht eingelesen.
START (CTRL-Q bzw. ASCII DC1) Wird zum Fortsetzen der Ausgabe
benutzt. Die Ausgabe ist durch ein STOP-Zeichen angehalten
worden. Wenn die Ausgabe angehalten worden ist, werden
START-Zeichen ignoriert und nicht gelesen.
DISCARD (CTRL-O bzw. ASCII SI) Bewirkt, daß die nachfolgende Ausgabe
verlorengeht. Die Ausgabe geht so lange verloren, bis ein
weiteres DISCARD-Zeichen eingegeben wird, weitere Eingabezei-
chen empfangen werden oder die Bedingung durch ein Programm
zurückgesetzt wird.
LNEXT (CTRL-V bzw. ASCII SYN) Bewirkt, daß die Sonderbedeutung des
nachfolgenden Zeichens aufgehoben wird. Dies funktioniert bei
allen oben aufgeführten Sonderzeichen. Dadurch können Zeichen
eingegeben werden, die andernfalls durch das System interpre-
tiert würden (z. B. Zeichen wie KILL, QUIT usw.).
Seite 7 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
Die Werte der Zeichen INTR, QUIT, ERASE, WERASE, KILL, REPRINT, EOF,
EOL, EOL2, SWTCH, SUSP, DSUSP, STOP, START, DISCARD und LNEXT können
an individuelle Anforderungen angepaßt werden. Wenn der Wert eines
Steuerzeichens POSIXVDISABLE (0) ist, wird die Funktion dieses Steu-
erzeichens deaktiviert. Die Zeichen ERASE, KILL und EOF können durch
einen vorangestellten Gegenschrägstrich (\) entwertet werden; in die-
sem Fall wird keine Sonderfunktion durchgeführt. Jedem der Sonderzei-
chen kann das LNEXT-Zeichen vorangestellt werden; in diesem Fall wird
keine Sonderfunktion durchgeführt.
Abgeschaltetes Modem
Wenn festgestellt wird, daß ein Modem abgeschaltet ist, wird an den
Steuerungsprozeß des Terminals ein SIGHUP-Signal übermittelt. Sofern
keine anderen Vorkehrungen getroffen wurden, bewirken diese Signale
die Beendigung des Prozesses. Wenn SIGHUP ignoriert oder abgefangen
wird, wird jede nachfolgende Leseanforderung so lange mit einem Datei-
endezeichen zurückgegeben, bis die Terminal-Sitzung beendet wird.
Wenn der Steuerungsprozeß nicht zur Vordergrund-Prozeßgruppe des Ter-
minals gehört, wird ein SIGTSTP-Signal an die Vordergrund-Prozeßgruppe
übermittelt. Sofern keine anderen Vorkehrungen getroffen wurden,
bewirken diese Signale das Anhalten der Prozesse.
Wenn Prozesse in Hintergrund-Prozeßgruppen versuchen, nach dem
Abschalten eines Modems auf das Steuerungsterminal zuzugreifen, wäh-
rend das Terminal noch der Sitzung zugeordnet ist, werden diesen Pro-
zessen die entsprechenden SIGTTOU- und SIGTTIN-Signale übermittelt.
Sofern keine anderen Vorkehrungen getroffen wurden, bewirkt dieses
Signal das Anhalten der Prozesse.
Das Steuerungsterminal bleibt in diesem Zustand, bis es erneut durch
den Steuerungsprozeß mit einem erfolgreichen open-Systemaufruf initia-
lisiert oder die Zuordnung durch den Steuerungsprozeß aufgehoben wird.
Terminal-Parameter
Die Parameter zur Funktionssteuerung der Geräte und Module, die die
termios-Schnittstelle bilden, werden durch die termios-Struktur in
<termios.h> definiert. Diese Struktur wird durch verschiedene
ioctl(2)-Systemaufrufe zum Abrufen oder Ändern dieser Parameter
benutzt und enthält die folgenden Elemente:
tcflagt ciflag; /* Steuerung der Dateneingabe */
tcflagt coflag; /* Steuerung der Datenausgabe */
tcflagt ccflag; /* Steuerung der Datenübertragung */
tcflagt clflag; /* Lokale Modi */
cct ccc[NCCS]; /* Steuerzeichen */
Seite 8 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
Die speziellen Steuerzeichen werden durch das Array ccc definiert.
Der symbolische Name NCCS steht für die Größe des Steuerzeichen-Arrays
und wird ebenfalls in <termios.h> definiert. Die relativen Positionen,
Indexnamen und typischen Standardwerte für jede Funktion sind wie
folgt festgelegt:
0 VINTR DEL
1 VQUIT FS
2 VERSE #
3 VKILL @
4 VEOF EOT
5 VEOL NUL
6 VEOL2 NUL
7 VSWTCH NUL
8 VSTRT DC1
9 VSTOP DC3
10 VSUSP SUB
11 VDSUSP EM
12 VREPRINT DC2
13 VDISCRD SI
14 VWERSE ETB
15 VLNEXT SYN
16-19 reserviert
Steuerung der Dateneingabe
Die ciflag beschreiben die grundlegende Eingabesteuerung für das Ter-
minal:
IGNBRK Break-Bedingung ignorieren.
BRKINT Signalunterbrechung bei Break.
IGNPAR Zeichen mit Paritätsfehlern ignorieren.
PARMRK Paritätsfehler kennzeichnen.
INPCK Paritätsprüfung für die Eingabe aktivieren.
ISTRIP Zeichen entfernen.
INLCR NL in der Eingabe auf CR abbilden.
IGNCR CR ignorieren.
ICRNL CR in der Eingabe auf NL abbilden.
IUCLC Großbuchstaben in der Eingabe auf Kleinbuchstaben abbilden.
IXON Start/Stop-Ausgabesteuerung aktivieren.
IXANY Ausgabe bei beliebigem Zeichen fortsetzen.
IXOFF Start/Stop-Eingabesteuerung aktivieren.
IMAXBEL BEL bei überlanger Eingabezeile ausgeben.
Wenn IGNBRK gesetzt ist, wird eine Break-Bedingung (ein Rahmenfehler,
der dadurch entsteht, daß alle Daten Null sind) in der Eingabe igno-
riert, d. h., sie wird nicht in die Eingabewarteschlange gesetzt und
somit nicht durch einen Prozeß gelesen. Wenn IGNBRK nicht gesetzt ist
und BRKINT gesetzt ist, werden die Ein- und Ausgabewarteschlangen bei
einer Break-Bedingung geleert; wenn das Terminal das Steuerungstermi-
nal einer Vordergrund-Prozeßgruppe ist, wird bei einer Break-Bedingung
ein einzelnes SIGINT-Signal an diese Vordergrund-Prozeßgruppe übermit-
telt. Wenn weder IGNBRK noch BRKINT gesetzt ist, wird eine Break-
Seite 9 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
Bedingung als einzelnes ASCII NULL-Zeichen ('\0') eingelesen; wenn
PARMRK gesetzt ist, wird eine Break-Bedingung als '\377', '\0', '\0'
eingelesen.
Wenn IGNPAR gesetzt ist, wird ein Byte mit Rahmen- oder Paritätsfeh-
lern (keine Break-Bedingung) ignoriert.
Wenn PARMRK gesetzt und IGNPAR nicht gesetzt ist, wird ein Byte mit
einem Rahmen- oder Paritätsfehler (keine Break-Bedingung) an die
Anwendung in Form einer dreistelligen Zeichenkette übergeben: '\377',
'\0', X, wobei X für die Daten des fehlerhaft empfangenen Bytes steht.
Um in einem derartigen Fall Eindeutigkeit herzustellen, wird, wenn
ISTRIP nicht gesetzt ist, ein gültiges Zeichen '\377' an die Anwendung
als '\377', '\377' übergeben. Wenn weder IGNPAR noch PARMRK gesetzt
ist, wird ein Rahmen- oder Paritätsfehler (keine Break-Bedingung) an
die Anwendung als einzelnes ASCII NULL-Zeichen ('\0') übergeben.
Wenn INPCK gesetzt ist, wird die Paritätsprüfung für die Eingabe akti-
viert. Wenn INPCK nicht gesetzt ist, wird die Paritätsprüfung für die
Eingabe deaktiviert. Dies ermöglicht die Paritätserzeugung auf der
Ausgabe, ohne daß bei der Eingabe Paritätsfehler gemeldet würden. Ob
die Eingabe-Paritätsprüfung aktiviert ist oder nicht, ist unabhängig
davon, ob die Paritätsfeststellung aktiviert ist oder nicht. Wenn die
Paritätsfeststellung aktiviert und die Paritätsprüfung für die Eingabe
deaktiviert ist, erkennt die Hardware, mit der das Terminal verbunden
ist, das Paritätsbit; die Terminal-Gerätedatei überprüft jedoch nicht,
ob das Paritätsbit korrekt gesetzt ist oder nicht.
Wenn ISTRIP gesetzt ist, werden die gültigen Eingabezeichen zunächst
auf sieben Bits gekürzt; andernfalls werden alle acht Bits verarbei-
tet.
Wenn INLCR gesetzt ist, wird ein NL-Zeichen nach dem Empfang in ein
CR-Zeichen umgesetzt. Wenn IGNCR gesetzt ist, wird ein CR-Zeichen nach
dem Empfang ignoriert (nicht gelesen). Wenn ICRNL dagegen gesetzt ist,
wird ein CR-Zeichen nach dem Empfang in ein NL-Zeichen umgesetzt.
Wenn IUCLC gesetzt ist, wird ein Großbuchstabe nach dem Empfang in den
entsprechenden Kleinbuchstaben umgesetzt.
Wenn IXON gesetzt ist, wird die Start-/Stop-Ausgabesteuerung akti-
viert. Ein STOP-Zeichen hält die Ausgabe nach dem Empfang an, während
ein START-Zeichen die Ausgabe nach dem Empfang wieder fortsetzt. Die
Zeichen STOP und START werden nicht eingelesen, sondern führen ledig-
lich Funktionen zur Flußsteuerung durch. Wenn IXANY gesetzt ist, wird
die angehaltene Ausgabe durch ein beliebiges Eingabezeichen fortge-
setzt.
Wenn IXOFF gesetzt ist, übermittelt das System ein STOP-Zeichen, wenn
die Eingabewarteschlange voll ist, und ein START-Zeichen, wenn genü-
gend Eingabezeichen eingelesen worden sind und die Eingabewarte-
schlange somit wieder fast leer ist.
Seite 10 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
Wenn IMAXBEL gesetzt ist, wird das Zeichen ASCII BEL bei einem Über-
lauf im Eingabestrom auf dem Bildschirm ausgegeben. Die weitere Ein-
gabe wird nicht abgespeichert; auf die Eingabezeichen, die sich
bereits im Eingabestrom befinden, hat dies jedoch keine Auswirkungen.
Wenn IMAXBEL nicht gesetzt ist, wird kein BEL-Zeichen ausgegeben, und
sämtliche in der Eingabewarteschlange enthaltenen Zeichen gehen bei
einem Überlauf des Eingabestroms verloren.
Die Steuerung der Dateneingabe erfolgt zu Beginn über BRKINT, ICRNL,
IXON und ISTRIP.
Steuerung der Datenausgabe
Im Feld coflag wird die Behandlung der Ausgabe durch das System
beschrieben:
OPOST Nachbearbeitung der Ausgabe.
OLCUC Kleinbuchstaben in der Ausgabe auf Großbuchstaben abbilden.
ONLCR NL in der Ausgabe auf CR-NL abbilden.
OCRNL CR in der Ausgabe auf NL abbilden.
ONOCR Keine CR-Ausgabe auf Spalte 0.
ONLRET NL führt Funktion von CR aus.
OFILL Füllzeichen für Verzögerung benutzen.
OFDEL Füllzeichen ist DEL, andernfalls NULL.
NLDLY Verzögerungen in Form von Zeilenendezeichen:
NL0
NL1
CRDLY Verzögerungen in Form von Carriage-Return-Zeichen:
CR0
CR1
CR2
CR3
TABDLY Verzögerungen in Form von Horizontal-Tabulatorzeichen
TAB0 oder Expansion der Tabulatorzeichen:
TAB1
TAB2
TAB3 Tabulatorzeichen in Leerzeichen umwandeln.
XTABS Tabulatorzeichen in Leerzeichen umwandeln.
BSDLY Verzögerungen in Form von Rückschritten:
BS0
BS1
VTDLY Verzögerungen in Form von Vertikal-Tabulatorzeichen:
VT0
VT1
FFDLY Verzögerungen in Form von Seitenvorschub-Zeichen:
FF0
FF1
Wenn OPOST gesetzt ist, werden die ausgegebenen Zeichen dem Status der
übrigen Flags entsprechend nachbearbeitet; andernfalls werden die Zei-
chen unverändert übertragen.
Seite 11 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
Wenn OLCUC gesetzt ist, wird ein Kleinbuchstabe auf den zugehörigen
Großbuchstaben abgebildet und übertragen. Diese Funktion wird häufig
in Kombination mit IUCLC benutzt.
Wenn ONLCR gesetzt ist, wird das Zeichen NL auf das Zeichenpaar CR-NL
abgebildet und übertragen. Wenn OCRNL gesetzt ist, wird das Zeichen CR
auf das Zeichen NL abgebildet und übertragen. Wenn ONOCR gesetzt ist,
wird kein CR-Zeichen übertragen, das sich in Spalte 0 befindet (d. h.
an der ersten Position). Wenn ONRET gesetzt ist, wird das Zeichen NL
für die Carriage-Return-Funktion benutzt; der Spaltenzeiger wird auf 0
gesetzt, und die für CR angegebenen Verzögerungen werden benutzt.
Andernfalls wird das Zeichen NL lediglich für die Zeilenvorschub-Funk-
tion benutzt; der Spaltenzeiger bleibt unverändert. Der Spaltenzeiger
wird ebenfalls auf 0 gesetzt, wenn das Zeichen CR tatsächlich übertra-
gen wird.
Die Verzögerungs-Bits geben an, wie lange die Übertragung wegen mecha-
nischer Bewegungen oder sonstiger Verzögerungen unterbrochen wird,
wenn bestimmte Zeichen an das Terminal übermittelt werden. Der Wert 0
bedeutet in jedem Fall keine Verzögerung. Wenn OFILL gesetzt ist, wird
die Verzögerung über Füllzeichen realisiert und nicht mit Hilfe eines
Zeitgebers. Dies kann für mit hoher Geschwindigkeit betriebene Termi-
nals benutzt werden, die nur sehr geringe Verzögerungen benötigen.
Wenn OFDEL gesetzt ist, wird DEL als Füllzeichen benutzt, andernfalls
NULL.
Wenn eine Verzögerung über ein Seitenvorschub- oder ein Vertikal-
Tabulatorzeichen realisiert wird, hat sie eine Dauer von ca. zwei
Sekunden.
Eine Verzögerung, die über ein Zeilenendezeichen realisiert wird, dau-
ert ca. 0,10 Sekunden. Wenn ONLRET gesetzt ist, werden die Verzögerun-
gen über Carriage-Return-Zeichen realisiert und nicht über Zeichenen-
dezeichen. Wenn OFILL gesetzt ist, werden zwei Füllzeichen übertragen.
Eine Carriage-Return-Verzögerung vom Typ 1 hängt von der aktuellen
Spaltenposition ab, Typ 2 dauert ca. 0,10 Sekunden und Typ 3 ca. 0,15
Sekunden. Wenn OFILL gesetzt ist, werden durch eine Verzögerung vom
Typ 1 zwei Füllzeichen übertragen und bei einer Verzögerung vom Typ 2
vier Füllzeichen.
Eine durch Horizontal-Tabulatorzeichen realisierte Verzögerung vom Typ
1 ist von der aktuellen Spaltenposition abhängig. Eine Verzögerung vom
Typ 2 dauert ca. 0,10 Sekunden. Bei einer Verzögerung vom Typ 3 wird
angegeben, daß die Tabulator- in Leerzeichen umgesetzt werden sollen.
Wenn OFILL gesetzt ist, werden für jede Verzögerung zwei Füllzeichen
übermittelt.
Eine durch Rückschrittzeichen realisierte Verzögerung dauert ca. 0,05
Sekunden. Wenn OFILL gesetzt ist, wird ein Füllzeichen übertragen.
Seite 12 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
Die tatsächliche Dauer der Verzögerungen hängt von der Übertragungsge-
schwindigkeit der Leitung und der Systemladezeit ab.
Die Steuerung der Datenausgabe erfolgt zu Beginn über den Wert OPOST,
ONLCR und TAB3.
Steuerungs-Modi
Das Feld ccflag beschreibt die Hardwaresteuerung des Terminals:
CBAUD Baudrate:
B0 Aufhängen
B50 50 Baud
B75 75 Baud
B110 110 Baud
B134 134 Baud
B150 150 Baud
B200 200 Baud
B300 300 Baud
B600 600 Baud
B1200 1200 Baud
B1800 1800 Baud
B2400 2400 Baud
B4800 4800 Baud
B9600 9600 Baud
B19200 19200 Baud
EXTA Externes A
B38400 38400 Baud
EXTB Externes B
CSIZE Zeichengröße:
CS5 5 Bit
CS6 6 Bit
CS7 7 Bit
CS8 8 Bit
CSTOPB Zwei Stop-Bits senden, sonst ein Stop-Bit
CREAD Empfängersystem aktivieren
PARENB Paritätsprüfung aktivieren
PARODD Ungerade Parität, sonst gerade
HUPCL Leitung bei letztem close-Aufruf unterbrechen
CLOCAL Lokale Leitung, sonst Wählleitung
CIBAUD Eingabe-Baudrate, falls unterschiedlich von der Ausgabe-Baudrate
PAREXT Erweiterte Parität des Paritätsbits für "mark" und "space parity"
Die CBAUD-Bits geben die Baudrate an. Bei der Baudrate Null (B0) wird
die Verbindung abgebrochen. Wenn B0 angegeben wird, wird das DTR-
Signal (Data-Terminal-Ready) nicht bestätigt. Dadurch wird die Verbin-
dung im Normalfall unterbrochen. Wenn die CIBAUD-Bits nicht Null sind,
geben sie die Baudrate für die Eingabe an, wobei die CBAUD-Bits die
Baudrate für die Ausgabe angeben; andernfalls wird die Baudrate sowohl
für die Ein- als auch für die Ausgabe über die CBAUD-Bits angegeben.
Die Werte für die CIBAUD-Bits entsprechen den Werten für die CBAUD-
Seite 13 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
Bits, die um die IBSHIFT-Bits (also um 16 Stellen) nach links verscho-
ben wurden. Änderungen in der Geschwindigkeit, die bei der betreffen-
den Hardware nicht möglich sind, werden ignoriert.
Die CSIZE-Bits geben die Zeichengröße in Bit für die Übertragung und
den Empfang an. Die Größenangabe schließt das Paritätsbit (falls vor-
handen) nicht ein. Wenn CSTOPB gesetzt ist, werden zwei Stop-Bits
benutzt, andernfalls ein Stop-Bit. So sind bei 110 Baud beispielsweise
zwei Stop-Bits notwendig.
Wenn PARENB gesetzt ist, wird die Paritätserzeugung und -feststellung
aktiviert und jedem Zeichen vor der Übermittlung ein Paritätsbit ange-
fügt. Das gesetzte PARODD-Flag gibt bei aktivierter Paritätsprüfung
die ungerade Parität an, andernfalls die gerade.
Wenn CREAD gesetzt ist, wird der Datenempfang aktiviert. Andernfalls
werden keine Zeichen in Empfang genommen.
Wenn HUPCL gesetzt ist, wird die Verbindung unterbrochen, sobald der
letzte Prozeß, für den die Leitung geöffnet ist, die Leitung mit dem
Aufruf von close schließt oder selbst beendet wird. Das DTR-Signal
wird somit nicht bestätigt.
Wenn CLOCAL gesetzt ist, wird von einer lokalen Direktverbindung ohne
Modemsteuerungssignale ausgegangen; andernfalls werden Modemsteue-
rungssignale unterstützt.
Beim Öffnen der Leitung wird die Hardwaresteuerung auf B300, CS8,
CREAD, HUPCL eingestellt.
Lokale Modi
Das Feld clflag der Argumentstruktur wird von der Leitungsprozedur
zur Steuerung der Terminal-Funktionen benutzt. Die grundlegende Lei-
tungsprozedur bietet folgende Funktionen:
ISIG Signale aktivieren.
ICANON Standardmäßige ("kanonische") Verarbeitung der Eingabe (Ver-
arbeitung des Erase- und Kill-Zeichens).
XCASE Standardmäßige ("kanonische") Groß-/Kleinbuchstabendar-
stellung.
ECHO Echo aktivieren.
ECHOE Erase-Zeichen als BS-SP-BS ausgeben.
ECHOK Nach Kill-Zeichen NL ausgeben.
ECHONL NL ausgeben.
NOFLSH Nach Unterbrechung oder Abbruch kein Leeren der Eingabe- und
Ausgabewarteschlange.
TOSTOP SIGTTOU für Ausgabe im Hintergrund übermitteln.
ECHOCTL Steuerzeichen als ^char auf dem Bildschirm wiedergeben, DEL
als ^?.
ECHOPRT Beim Löschen eines Zeichens Erase-Zeichen ausgeben.
Seite 14 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
ECHOKE Beim Löschen einer ganzen Zeile die Folge BS-SP-BS ausgeben.
FLUSHO Ausgabewarteschlange leeren.
PENDIN Noch nicht verarbeitete Eingabe bei nächster Leseanforderung
oder nächstem Eingabezeichen erneut ausgeben.
IEXTEN Erweiterte (implementierungsspezifische) Funktionen aktivie-
ren.
Wenn ISIG gesetzt ist, wird jedes Eingabezeichen mit den speziellen
Sonderzeichen INTR, QUIT, SWTCH, SUSP, STATUS und DSUSP verglichen.
Wenn ein Eingabezeichen zu einem dieser Steuerzeichen paßt, werden die
Funktionen ausgeführt, die diesem Zeichen zugeordnet sind. Wenn ISIG
nicht gesetzt ist, findet keine Überprüfung statt. Diese speziellen
Eingabefunktionen setzen somit ein gesetztes ISIG-Bit voraus.
Wenn ICANON gesetzt ist, wird die standardmäßige ("kanonische") Verar-
beitung der Eingabe aktiviert. Dadurch kann die Eingabe mit der ERASE-
und KILL-Funktion geändert werden; außerdem werden Eingabezeichen zu
Zeilen zusammengefaßt, die mit NL, EOF, EOL und EOL2 abgeschlossen
sind. Wenn ICANON nicht gesetzt ist, werden die Zeichen direkt aus der
Eingabewarteschlange eingelesen. Eine Leseanforderung wird erst
erfüllt, wenn mindestens MIN Zeichen empfangen worden sind oder TIME
Zehntelsekunden (Intercharacter-Timer) zwischen dem Empfang von zwei
Zeichen verstrichen sind. Dadurch können sowohl stoßweise ankommende
Zeichenströme effizient eingelesen als auch Einzelzeichen eingegeben
werden.
Wenn XCASE und ICANON gesetzt sind, werden Großbuchstaben sowohl bei
der Ein- als auch bei der Ausgabe in die entsprechenden Kleinbuchsta-
ben umgewandelt und ihnen ein Gegenschrägstrich (\) vorangestellt. In
diesem Modus werden die folgenden Escape-Sequenzen bei der Ausgabe
generiert und bei der Eingabe akzeptiert:
Für: Geben Sie ein:
` \´
| \!
~ \^
{ \(
} \)
\ \\
So wird A z. B. als \a eingegeben, \n als \\n und \N als \\\n.
Wenn ECHO gesetzt ist, werden die Zeichen nach dem Empfang auf dem
Bildschirm wiedergegeben.
Seite 15 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
Wenn ICANON gesetzt ist, sind die folgenden Echo-Funktionen möglich.
1. Wenn ECHO und ECHOE gesetzt sind und ECHOPRT nicht gesetzt ist,
werden die Zeichen ERASE und WERASE als zwei oder mehr Folgen von
ASCII BS SP BS; wiedergegeben; dadurch werden die letzten Zeichen
von einem CRT-Bildschirm gelöscht.
2. Wenn ECHO und ECHOPRT gesetzt sind, wird das erste ERASE- und
WERASE-Zeichen innerhalb einer Folge als Gegenschrägstrich (\) wie-
dergegeben, auf den die gerade gelöschten Zeichen folgen. Durch die
nachfolgenden ERASE- und WERASE-Zeichen werden die gerade gelösch-
ten Zeichen in umgekehrter Reihenfolge wiedergegeben. Durch die
nächsten Zeichen, bei denen es sich nicht um ERASE- und WERASE han-
delt, wird ein Schrägstrich (/) zunächst ausgegeben, bevor er wie-
dergegeben wird. ECHOPRT sollte für Hardcopy-Terminals benutzt wer-
den.
3. Wenn ECHOKE gesetzt ist, wird das KILL-Zeichen wiedergegeben, indem
jedes Zeichen gelöscht wird, das in der betreffenden Zeile des
Bildschirms enthalten ist (hierbei werden die durch ECHOE und
ECHOPRT eingestellten Mechanismen benutzt).
4. Wenn ECHOK gesetzt und ECHOKE nicht gesetzt ist, wird das Zeichen
NL nach dem ERASE-Zeichen auf dem Bildschirm ausgegeben; damit soll
deutlich gemacht werden, daß die Zeile gelöscht ist. Beachten Sie,
daß durch ein Escape-Zeichen (\) oder ein LNEXT-Zeichen, das dem
ERASE- oder KILL-Zeichen vorangeht, jede Sonderfunktion aufgehoben
wird.
5. Wenn ECHONL gesetzt ist, wird das Zeichen NL selbst dann auf dem
Bildschirm ausgegeben, wenn ECHO nicht gesetzt ist. Dies ist für
Terminals sinnvoll, die auf lokales Echo (Halbduplex-Betrieb)
gesetzt sind.
Wenn ECHOCTL gesetzt ist, werden sämtliche Steuerzeichen (Zeichen mit
Codes im Bereich 0 und 37 oktal), bei denen es sich nicht um ASCII
TAB, ASCII NL, das START- Zeichen und das STOP-Zeichen, ASCII CR und
ASCII BS handelt, als ^X auf dem Bildschirm ausgegeben; dabei steht X
für das Zeichen, das durch die Addition des Oktalwerts 100 und des
Codes des Steuerzeichens entsteht (das Zeichen mit dem Oktalwert 1
wird also als ^A ausgegeben und das ASCII DEL-Zeichen mit dem Oktal-
wert 177 wird als ^? ausgegeben).
Wenn NOFLSH gesetzt ist, entfällt die normale Leerung der Eingabe- und
Ausgabewarteschlangen im Zusammenhang mit den Zeichen INTR, QUIT und
SUSP. Dieses Bit sollte beim erneuten Starten von Systemaufrufen
gesetzt werden, die entweder von einem Terminal einlesen oder auf ein
Terminal schreiben [siehe sigaction(2)].
Seite 16 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
Wenn TOSTOP gesetzt ist, wird das Signal SIGTTOU an den Prozeß über-
mittelt, der auf sein Steuerungsterminal zu schreiben versucht, obwohl
er sich nicht in der Vordergrund-Prozeßgruppe für dieses Terminal
befindet. Durch dieses Signal wird der Prozeß im Normalfall angehal-
ten. Andernfalls wird die durch diesen Prozeß erzeugte Ausgabe in den
aktuellen Ausgabestrom gesetzt. Eine Ausnahme bilden hier die Pro-
zesse, die SIGTTOU-Signale ignorieren oder blockieren; derartige Pro-
zesse dürfen gegebenenfalls eine Ausgabe erzeugen.
Wenn FLUSHO gesetzt ist, gehen alle auf das Terminal geschriebene
Daten verloren. Dieses Bit wird bei der Eingabe des FLUSH-Zeichens
gesetzt. Soll die Eingabe des FLUSH-Zeichens ohne Auswirkungen blei-
ben, kann ein Programm das FLUSHO-Bit zurücksetzen.
Wenn PENDIN gesetzt ist, wird sämtliche noch nicht eingelesene Eingabe
erneut ausgegeben, sobald das nächste Eingabezeichen empfangen wird.
Wenn IEXTEN gesetzt ist, werden die folgenden implementierungsspezifi-
schen Funktionen aktiviert: Sonderzeichen (WERASE, REPRINT, DISCARD
und LNEXT) und lokale Flags (TOSTOP, ECHOCTL, ECHOPRT, ECHOKE, FLUSHO
und PENDIN).
Die Leitungssteuerung erfolgt zu Beginn über ISIG, ICANON, ECHO,
ECHOK.
Mindest- und Zeitlimitwerte
Die Werte MIN und TIME werden im Abschnitt Verzögerungsfreie Verarbei-
tung der Eingabe beschrieben. Der Anfangswert von MIN ist 1, der von
TIME 0.
Größe des Terminals
Die Anzahl der Zeilen und Spalten auf dem Bildschirm des Terminals
wird in der Struktur winsize angegeben, die durch <sys/termios.h>
definiert ist. Diese Struktur enthält die folgenden Elemente:
unsigned short wsrow; /* Zeilen, in Zeichen */
unsigned short wscol; /* Spalten in Zeichen */
unsigned short wsxpixel; /* Größe, in horizontaler
Richtung in Bildpunkten */
unsigned short wsypixel; /* Größe, in vertikaler
Richtung in Bildpunkten */
Seite 17 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
termio-Struktur
Die termio-Struktur von Reliant UNIX wird durch einige ioctl-Funktio-
nen benutzt und in <sys/termio.h> definiert. Die Struktur enthält die
folgenden Elemente:
unsigned short ciflag; /* Eingabemodi */
unsigned short coflag; /* Ausgabemodi */
unsigned short ccflag; /* Steuerungsmodi */
unsigned short clflag; /* Lokale Modi */
char cline; /* Leitungsprozedur */
unsigned char ccc[NCC]; /* Steuerzeichen */
Die speziellen Steuerzeichen werden durch das Array ccc definiert.
Der symbolische Name NCCS steht für die Größe des Steuerzeichen-Arrays
und wird ebenfalls in <termios.h> definiert. Die relativen Positionen,
Indexnamen und typischen Standardwerte für jede Funktion sind wie
folgt festgelegt:
0 VINTR DEL
1 VQUIT FS
2 VERASE #
3 VKILL @
4 VEOF EOT
5 VEOL NUL
6 VEOL2 NUL
7 reserviert
Die Systemaufrufe, die auf die termio-Struktur zugreifen, wirken sich
ausschließlich auf die Flags und Steuerzeichen aus, die in der
termio-Struktur gespeichert werden können; die übrigen Flags und Steu-
erzeichen bleiben durch diese Systemaufrufe unverändert.
Modemleitungen
Aus den Gerätedateien für die seriellen Anschlüsse können die von der
Hardware unterstützten Modemsteuerungsleitungen eingelesen werden; die
von der Hardware unterstützten Modemstatusleitungen können in diesen
Dateien geändert werden. Ein Gerät kann die folgenden Modemsteuerungs-
und Modemstatusleitungen unterstützen; die Zeilen sind in
<sys/termios.h> definiert:
TIOCMLE Leitung aktivieren
TIOCMDTR Terminal bereit
TIOCMRTS Sendeanforderung
TIOCMST Rückkanal Sendedaten
TIOCMSR Rückkanal Empfangsdaten
TIOCMCTS Sendebereitschaft
TIOCMCAR Empfangssignalpegel
TIOCMRNG Tonruf
TIOCMDSR Betriebsbereitschaft
Seite 18 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
TIOCMCD ist ein Synonym für TIOCMCAR und TIOCMRI ist ein Synonym
für TIOCMRNG. Ein bestimmtes Gerät muß nicht unbedingt alle
Steuerungs- und Statusleitungen unterstützen; schlagen Sie die ent-
sprechenden Informationen in der Dokumentation für das Gerät nach.
IOCTL-FUNKTIONSAUFRUFE
Dieser Abschnitt beschreibt die ioctl-Funktionsaufrufe, die von den
Geräten und STREAMS-Modulen der termios-Schnittstelle unterstützt wer-
den. Einige der Aufrufe werden möglicherweise nicht von allen Geräten
oder Modulen unterstützt. Die Funktionen, die durch diese Aufrufe zur
Verfügung gestellt werden, sind auch durch den bei termios(3C) angege-
benen Systemaufruf möglich, dem im Normalfall der Vorzug gegeben wird.
TCGETS Das Argument ist ein Zeiger auf eine termios-Struktur.
Die aktuellen Terminal-Parameter werden abgerufen und
in dieser Struktur gespeichert.
TCSETS Das Argument ist ein Zeiger auf eine termios-Struktur.
Die aktuellen Terminal-Parameter werden aufgrund der in
dieser Struktur gespeicherten Werte eingestellt. Die
Änderung wird sofort wirksam.
TCSETSW Das Argument ist ein Zeiger auf eine termios-Struktur.
Die aktuellen Terminal-Parameter werden aufgrund der in
dieser Struktur gespeicherten Werte eingestellt. Die
Änderung wird nach der Übertragung sämtlicher in der
Ausgabewarteschlange enthaltenen Daten durchgeführt.
Dieses Format eignet sich zur Änderung von Parametern,
die sich auf die Ausgabe auswirken.
TCSETSF Das Argument ist ein Zeiger auf eine termios-Struktur.
Die aktuellen Terminal-Parameter werden aufgrund der in
dieser Struktur gespeicherten Werte eingestellt. Die
Änderung wird unmittelbar nach der Übermittlung sämtli-
cher in der Ausgabewarteschlange enthaltenen Zeichen
wirksam. Dabei gehen sämtliche in der Eingabewartesch-
lange enthaltenen Zeichen verloren.
TCGETA Das Argument ist ein Zeiger auf eine termio-Struktur.
Die aktuellen Terminal-Parameter werden abgefragt; die-
jenigen Parameter, die in einer termio-Struktur gespei-
chert werden können, werden in dieser Struktur gespei-
chert.
TCSETA Das Argument ist ein Zeiger auf eine termio-Struktur.
Diejenigen Terminal-Parameter, die in einer termio-
Struktur gespeichert werden können, werden aufgrund der
Werte in dieser Struktur eingestellt. Die Änderung wird
sofort wirksam.
Seite 19 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
TCSETAW Das Argument ist ein Zeiger auf eine termio-Struktur.
Diejenigen Terminal-Parameter, die in einer termio-
Struktur gespeichert werden können, werden aufgrund der
Werte in dieser Struktur eingestellt. Die Änderung wird
nach der Übertragung sämtlicher in der Ausgabewarte-
schlange enthaltenen Zeichen wirksam. Diese Variante
sollte bei der Änderung von Parametern benutzt werden,
durch die die Ausgabe verändert wird.
TCSETAF Das Argument ist ein Zeiger auf eine termio-Struktur.
Diejenigen Terminal-Parameter, die in einer termio-
Struktur gespeichert werden können, werden aufgrund der
Werte in dieser Struktur eingestellt. Die Änderung wird
nach der Übertragung sämtlicher in der Ausgabewarte-
schlange enthaltenen Zeichen durchgeführt. Sämtliche
Zeichen in der Eingabewarteschlange werden gelöscht,
und dann wird die Änderung durchgeführt.
TCSBRK Das Argument ist ein int-Wert. Es wird gewartet, bis
die Ausgabewarteschlange geleert ist. Beim Argument 0
wird ein Break-Zeichen (0,25 Sekunden lang Bits mit dem
Wert Null) übermittelt.
TCXONC Start/Stop-Steuerung. Das Argument ist ein int-Wert.
Beim Wert 0 wird die Ausgabe angehalten; beim Wert 1
wird die angehaltene Ausgabe fortgesetzt; beim Wert 2
wird die Eingabe angehalten; beim Wert 3 wird die ange-
haltene Eingabe erneut gestartet.
TCFLSH Das Argument ist ein int-Wert. Beim Argument 0 wird die
Eingabewarteschlange geleert; beim Argument 1 wird die
Ausgabewarteschlange geleert; beim Argument 2 wird
sowohl die Ein- als auch die Ausgabewarteschlange
geleert.
TIOCGPGRP Das Argument ist ein Zeiger auf eine pidt-Struktur.
Der Wert dieser pidt wird auf die Prozeßgruppennummer
der Vordergrund-Prozeßgruppe gesetzt, die dem Terminal
zugeordnet ist. Nähere Informationen zu TCGETPGRP fin-
den Sie unter termios(3C).
TIOCSPGRP Das Argument ist ein Zeiger auf eine pidt-Struktur.
Dem Terminal wird diejenige Prozeßgruppe zugeordnet,
deren Prozeßgruppennumer durch den Wert von pidt ange-
geben wird. Die neue Prozeßgruppennummer muß im zuläs-
sigen Bereich der Prozeßgruppennummern liegen; andern-
falls wird der Fehler EPERM zurückgegeben. Nähere
Informationen zu TCSETPGRP finden Sie unter der
Beschreibung von termios(3C).
Seite 20 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
TIOCGSID Das Argument ist ein Zeiger auf eine pidt-Struktur.
Die Sitzungsnummer des Terminals wird abgerufen und in
pidt gespeichert.
TIOCGWINSZ Das Argument ist ein Zeiger auf eine winsize-Struktur.
In dieser Struktur wird die Größe des Terminals gespei-
chert, die dann an den Treiber übermittelt wird.
TIOCSWINSZ Das Argument ist ein Zeiger auf eine winsize-Struktur.
Aufgrund der Werte in dieser Struktur wird dem
Terminal-Treiber die Größe des Terminals übermittelt.
Wenn die neuen Größen sich von den alten unterscheiden,
wird ein SIGWINCH-Signal an die Prozeßgruppe des Termi-
nals übermittelt.
TIOCMBIS Das Argument ist ein Zeiger auf eine Variable vom Typ
int, dessen Wert eine Maske mit den zu aktivierenden
Modemsteuerungsleitungen ist. Die Steuerungsleitungen,
deren Bits im Argument gesetzt sind, werden aktiviert;
die übrigen Steuerungsleitungen bleiben unverändert.
TIOCMBIC Das Argument ist ein Zeiger auf eine Variable vom Typ
int. Der Wert dieser Variablen ist eine Maske mit den
zu deaktivierenden Modemsteuerungsleitungen. Die Steue-
rungsleitungen, deren Bits im Argument gesetzt sind,
werden deaktiviert; die übrigen Modemsteuerungsleitun-
gen bleiben unverändert.
TIOCMGET Das Argument ist ein Zeiger auf eine Variable vom Typ
int. Der aktuelle Status der Modemstatusleitungen wird
abgerufen und in der int-Variablen abgespeichert, auf
die das Argument zeigt.
TIOCMSET Das Argument ist ein Zeiger auf eine Variable vom Typ
int mit den neuen Modemsteuerungsleitungen. Abhängig
davon, ob das Bit für den betreffenden Modus gesetzt
ist oder nicht, werden die Modemsteuerungsleitungen
aktiviert oder deaktiviert.
Standardparameter für den Anschluß
Die Standardparameter für den Anschluß sind HUPCL, 9600
Baud, CREAD, CS08, Noparity.
Die folgenden ioctl-Aufrufe werden von den gängigen STREAMS-Terminal-
treibern (d. h. nur für an ITP-Anschlüsse angeschlossene Geräte) für
die Implementierung der Funktion "login path", die sich bewährt hat,
des wahlfreien Commercial Security Product (CSP) unterstützt. Die
ioctl-Aufrufe verursachen Fehler, es sei denn, CSP ist im Betriebssy-
stem installiert.
Seite 21 Reliant UNIX 5.44 Gedruckt 11/98
termio(7) termio(7)
TIOCSSECURE Das Argument wird ignoriert. In der Regel wird angenom-
men, daß die Leitung vom Modem gesteuert wird, (d. h.
Einstellungen unter CLOCAL werden ignoriert). Wurde
diese Einstellung einmal aktiviert, kann sie nicht wie-
der manuell deaktiviert werden. Sie wird vom Treiber
automatisch deaktiviert, wenn das Gerät von keinem Pro-
zeß mehr geöffnet ist.
TIOCGSECURE Das Argument wird ignoriert. Der ioctl-Aufruf übergibt
1, wenn die TIOCSSECURE-Einstellung des Geräts akti-
viert ist. Es wird daher in der Regel angenommen, daß
das Modem die Steuerung übernimmt. Andernfalls wird 0
übergeben.
DATEIEN
Dateien in oder unter /dev
SIEHE AUCH
fork(2), ioctl(2), setsid(2), signal(2), termios(3C), streamio(7).
Seite 22 Reliant UNIX 5.44 Gedruckt 11/98