termios(3C) termios(3C)
NAME
termios: tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow,
cfgetospeed, cfsetospeed, cfgetispeed, cfsetispeed, tcgetpgrp,
tcsetpgrp, tcgetsid - Allgemeine Terminalschnittstelle
SYNTAX
#include <termios.h>
int tcgetattr(int fildes, struct termios *termiosp);
int tcsetattr(int fildes, int optionalactions,
const struct termios *termiosp);
int tcsendbreak(int fildes, int duration);
int tcdrain(int fildes);
int tcflush(int fildes, int queueselector);
int tcflow(int fildes, int action);
speedt cfgetospeed(const struct termios *termiosp);
int cfsetospeed(const struct termios *termiosp, speedt speed);
speedt cfgetispeed(const struct termios *termiosp);
int cfsetispeed(const struct termios *termiosp, speedt speed);
#include <sys/types.h>
#include <unistd.h>
pidt tcgetpgrp(int fildes);
int tcsetpgrp(int fildes, pidt pgid);
pidt tcgetsid(int fildes);
BESCHREIBUNG
Diese Funktionen beschreiben eine allgemeine Terminalschnittstelle zur
Steuerung asynchroner Kommunikationsanschlüsse. Eine detailliertere
Übersicht der Terminalschnittstelle kann in termio(7) gefunden werden;
dort wird außerdem eine ioctl(2)-Schnittstelle beschrieben, welche
dieselbe Funktionalität besitzt. Trotz allem ist die hier beschriebene
Schnittstelle die bevorzugte.
Viele der hier beschriebenen Funktionen verwenden ein termiosp-Argu-
ment, welches den Zeiger auf eine termios-Struktur darstellt. Diese
Struktur enthält die folgenden Komponenten:
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
termios(3C) termios(3C)
tcflagt ciflag; /* Eingabemodi */
tcflagt coflag; /* Ausgabemodi */
tcflagt ccflag; /* Kontrollmodi */
tcflagt clflag; /* Lokale Modi */
cct ccc[NCCS]; /* Steuerzeichen */
Diese Strukturkomponenten werden in termio(7) genau beschrieben.
Terminalattribute abrufen und schreiben
Die Funktion tcgetattr() liest die Parameter, welche mit dem Objekt
fildes verknüpft sind, und speichert sie in der Struktur termios, wel-
che durch termiosp bezeichnet wird. Diese Funktion kann von einem
Hintergrundprozeß aufgerufen werden; die Terminaleigenschaften können
danach von einem Vordergrundprozeß geändert werden.
Die Funktion tcsetattr() stellt die mit dem Terminal verbundenen Para-
meter ein (es sei denn, die zugrundeliegende Hardware bietet nicht die
benötigte Unterstützung). Die Parameter werden der Struktur termios
entnommen, welche durch termiosp wie folgt bezeichnet wird:
- Enthält das Feld optionalactions den Wert TCSANOW, erfolgt die
Änderung sofort.
- Ist optionalactions gleich TCSADRAIN, erfolgt die Änderung, nach-
dem alle Ausgaben für fildes übertragen wurden. Diese Funktion
sollte verwendet werden, wenn Parameter geändert werden, welche
Ausgaben beeinträchtigen.
- Wenn optionalactions TCSAFLUSH enthält, erfolgt die Änderung,
nachdem alle Ausgaben an das Objekt fildes übertragen wurden; alle
empfangenen aber nicht gelesenen Eingaben werden gelöscht, bevor
die Änderung vergenommen wird.
Die symbolischen Konstanten für die Werte aus optionalactions werden
in der Datei termios.h [siehe termios(5)] definiert.
Leitungssteuerung
Wenn das Terminal die asynchrone serielle Datenübertragung verwendet,
verursacht die Funktion tcsendbreak() die Übertragung eines ununter-
brochenen Stroms von Nullbits für eine bestimmte Dauer. Ist duration
Null, wird die Übertragung von Nullbits für mindestens 0,25 Sekunden
und nicht mehr als 0,5 Sekunden aktiviert. Ist duration nicht Null,
verhält es sich ähnlich wie bei tcdrain().
Verwendet das Terminal nicht die asynchrone serielle Datenübertragung,
sendet die Funktion tcsendbreak() Daten, um eine Break-Bedingung zu
generieren, oder es wird keine Aktion ausgeführt.
Die Funktion tcdrain() wartet, bis alle Ausgaben an das Objekt fildes
übertragen wurden.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
termios(3C) termios(3C)
Bei erfolgreicher Beendigung löscht die Funktion tcflush() alle Daten,
die auf das Objekt fildes geschrieben, aber nicht übertragen wurden,
oder Daten, die empfangen, aber nicht gelesen wurden, abhängig vom
Wert queueselector:
- Ist queueselector gleich TCIFLUSH, werden Daten gelöscht, welche
empfangen und nicht gelesen wurden.
- Enthält queueselector den Wert TCOFLUSH, werden Daten gelöscht,
welche geschrieben, aber nicht übertragen wurden.
- Wenn queueselector gleich TCIOFLUSH ist, werden sowohl empfangene,
nicht gelesene Daten als auch geschriebene, nicht übertragene Daten
gelöscht.
Die Funktion tcflow () hält die Übertragung oder den Empfang von Daten
für das Objekt fildes an, abhängig vom Wert action:
- Ist action gleich TCOOFF, wird die Ausgabe angehalten.
- Ist action gleich TCOON, wird die angehaltene Ausgabe wieder
gestartet.
- Wenn action gleich TCIOFF ist, überträgt das System ein STOP-Zei-
chen, welches das Terminal dazu veranlaßt, die Datenübertragung zum
System zu stoppen.
- Wenn action gleich TCION ist, überträgt das System ein START-Zei-
chen, welches das Terminal dazu veranlaßt, die Datenübertragung an
das System zu beginnen.
Baudrate abrufen und setzen
Die Funktionen zum Lesen und Setzen der Ein- und Ausgabebaudraten ver-
arbeiten die Werte aus der Struktur termios. Die Auswirkungen auf das
Terminalgerät, welche weiter unten beschrieben werden, werden nicht
wirksam, bis die Funktion tcsetattr() erfolgreich ausgeführt wird.
Die Eingabe- und Ausgabebaudraten werden in der Struktur termios abge-
legt. Die in der Tabelle abgebildeten Übertragungsraten werden unter-
stützt. Die Namen aus der Tabelle werden in der Datei termios.h defi-
niert:
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
termios(3C) termios(3C)
__________________________________________________
| Name Beschreibung Name Beschreibung|
|_________________________________________________|
| B0 Auflegen (Hangup) B600 600 Baud |
| B50 50 Baud B1200 1200 Baud |
| B75 75 Baud B1800 1800 Baud |
| B110 110 Baud B2400 2400 Baud |
| B134 134,5 Baud B4800 4800 Baud |
| B150 150 Baud B9600 9600 Baud |
| B200 200 Baud B19200 19200 Baud |
| B300 300 Baud B38400 38400 Baud |
|_________________________________________________|
cfgetospeed() liest die Ausgabebaudrate und speichert sie in der
termios-Struktur, auf die termiosp zeigt.
cfsetospeed() setzt die Ausgabebaudrate, welche sich in der termios-
Struktur befindet, auf die termiosp zeigt, auf speed. Die Nullrate B0
wird verwendet, um die Verbindung zu beenden. Wird B0 angegeben, wer-
den die Steuerleitungen des Modems nicht länger verarbeitet. Normaler-
weise beendet dies die Verbindung.
cfgetispeed() liest die Eingabebaudrate und speichert sie in der
termios-Struktur, auf die termiosp zeigt.
cfsetispeed() stellt die Eingabebaudrate, die in der termios-Struktur
gespeichert ist, auf die termiosp zeigt, auf speed. Wenn die Eingabe-
baudrate auf Null gesetzt wird, wird die Eingabebaudrate auf den Wert
der Ausgabebaudrate gesetzt. Sowohl cfsetispeed() als auch
cfsetospeed() liefern den Wert Null zurück, wenn die Operation erfol-
greich ausgeführt wurde, und -1, wenn ein Fehler aufgetreten ist. Ver-
suche, nicht unterstützte Baudraten anzugeben, werden ignoriert. Dies
bezieht sich auf die Änderung von Baudraten, welche nicht von der
Hardware unterstützt werden, und auf die Einstellung von Ein- und Aus-
gabebaudraten auf unterschiedliche Werte, wenn die Hardware dies nicht
erlaubt.
Vordergrundprozeßgruppen-ID eines Terminals abrufen und setzen
tcsetpgrp() stellt die Vordergrundprozeßgruppen-ID des durch fildes
angegebenen Terminals auf pgid. Die Datei fildes muß ein steuerndes
Terminal des aufrufenden Prozesses bezeichnen, und das steuernde Ter-
minal muß mit der Sitzung des aufrufenden Prozesses verbunden sein.
pgid muß der Prozeßgruppen-ID eines Prozesses entsprechen, der sich in
derselben Sitzung wie der aufrufende Prozeß befindet.
tcgetpgrp() liefert die Vordergrundprozeßgruppen-ID des durch fildes
angegebenen Terminals. tcgetpgrp() kann durch einen Prozeß aufgerufen
werden, der zu einer Hintergrundprozeßgruppe gehört. Die Informationen
können nachher durch einen Prozeß geändert werden, der zu einer Vor-
dergrundprozeßgruppe gehört.
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
termios(3C) termios(3C)
Sitzungs-ID des Terminals abrufen
Die Funktion tcgetsid() ruft die Prozeßgruppen-ID der Sitzung ab, die
von dem Terminal gesteuert wird, das durch fildes angegeben ist.
ERGEBNIS
Bei Erfolg wird von tcgetpgrp() die Prozeßgruppen-ID der Vordergrund-
prozeßgruppe zurückgeliefert, welche mit dem angegebenen Terminal ver-
bunden ist. Ansonsten wird -1 zurückgegeben und errno gesetzt.
Bei Erfolg liefert tcgetsid() die Sitzungs-ID, die mit dem angegebenen
Terminal verbunden ist. Ansonsten wird -1 zurückgegeben und errno
gesetzt.
Die Funktion cfgetispeed() liefert bei erfolgreicher Beendigung einen
Wert vom Typ speedt zurück, der die Eingabebaudrate repräsentiert.
Die Funktion cfgetospeed() liefert bei erfolgreicher Beendigung eben-
falls einen Wert vom Typ speedt zurück, der die Ausgabebaudrate
repräsentiert. Beide Funktionen liefern den Wert aus der termios-
Struktur ohne Interpretation.
Bei Erfolg liefern alle anderen Funktionen den Wert 0. Ansonsten wird
-1 zurückgegeben und errno gesetzt.
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
Die Funktionen schlagen fehl, wenn wenigstens eine der folgenden
Bedingungen erfüllt ist:
EBADF Das Argument fildes ist kein gültiger Dateideskriptor.
ENOTTY Die Datei fildes ist kein Terminal.
Die Funktionen cfsetispeed() und cfsetospeed() können bei folgenden
Bedingungen fehlschlagen:
EINVAL Der Wert von speed ist keine gültige Baudrate.
EINVAL Der Wert von speed liegt außerhalb des gültigen Bereichs wie
in termios.h angegeben.
tcsetattr() schlägt außerdem fehl, wenn folgende Bedingung wahr ist:
EINVAL Das Argument optionalactions enthält keinen angemessenen
Wert, oder es wurde versucht, ein in der termios-Struktur
dargestelltes Attribut auf einen nicht unterstützten Wert
einzustellen.
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
termios(3C) termios(3C)
EINTR Die Funktion tcsetattr() wurde durch ein Signal unterbro-
chen.
tcsendbreak() schlägt außerdem fehl, wenn folgende Bedingung wahr ist:
EINVAL Das Gerät unterstützt die Funktion tcsendbreak() nicht.
tcdrain() schlägt außerdem fehl, wenn eine der folgenden Bedingungen
erfüllt ist:
EINTR Die Funktion tcdrain() wurde durch ein Signal unterbrochen.
EINVAL Das Gerät unterstützt die Funktion tcdrain() nicht.
tcflush() schlägt außerdem fehl, wenn folgende Bedingung erfüllt ist:
EINVAL Das Gerät unterstützt die Funktion tcflush() nicht, oder das
Argument queueselector enthält keinen entsprechenden Wert.
tcflow() schlägt außerdem fehl, wenn folgende Bedingung erfüllt ist:
EINVAL Das Gerät unterstützt die Funktion tcflow() nicht, oder
action enthält keinen entsprechenden Wert.
tcgetpgrp() schlägt außerdem fehl, wenn folgende Bedingung erfüllt
ist:
ENOTTY Der aufrufende Prozeß hat kein steuerndes Terminal, oder
fildes entspricht nicht dem steuernden Terminal.
tcsetpgrp() schlägt außerdem fehl, wenn folgende Bedingung erfüllt
ist:
EINVAL pgid ist keine gültige Prozeßgruppen-ID.
ENOTTY Der aufrufende Prozeß besitzt kein steuerndes Terminal, oder
fildes entspricht nicht dem steuernden Terminal, oder das
steuernde Terminal ist nicht mehr mit der Sitzung des aufru-
fenden Prozesses verbunden.
EPERM pgid entspricht nicht der Prozeßgruppe eines existierenden
Prozesses in derselben Sitzung wie der aufrufende Prozeß.
tcgetsid() schlägt außerdem fehl, wenn folgende Bedingung erfüllt ist:
EACCES Das Argument fildes ist keinem steuernden Terminal zugeord-
net.
EBADF Das Argument fildes ist kein gültiger Dateideskriptor.
ENOTTY Die fildes zugeordnete Datei ist keine Terminaldatei.
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98
termios(3C) termios(3C)
SIEHE AUCH
setpgid(2), setsid(2), unistd(4), termios(5), types(5), termio(7).
Seite 7 Reliant UNIX 5.44 Gedruckt 11/98