.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 2002 Walter Harms .\" and Andries Brouwer . .\" .\" SPDX-License-Identifier: GPL-1.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH ioctl_tty 2 "2. Mai 2024" "Linux man\-pages 6.8" .SH BEZEICHNUNG ioctl_tty \- Ioctls für Terminals und serielle Leitungen .SH BIBLIOTHEK Standard\-C\-Bibliothek (\fIlibc\fP, \fI\-lc\fP) .SH ÜBERSICHT .nf \fB#include \fP \fB#include \fP /* Definition von \fBstruct termios\fP, \fB struct termios2\fP und \fB Bnnn\fP, \fBBOTHER\fP, \fBCBAUD\fP, \fBCLOCAL\fP, \fB TC*\fP{\fBFLUSH\fP,\fBON\fP,\fBOFF\fP} und anderen Konstanten */ .P \fBint ioctl(int \fP\fIdd\fP\fB, int \fP\fIAkt\fP\fB, …);\fP .fi .SH BESCHREIBUNG Der \fBioctl\fP(2)\-Aufruf für Terminals und serielle Ports akzeptiert viele mögliche Aktionsargumente. Die meisten erwarten ein drittes Argument, von verschiedenem Typ, hier \fIargp\fP oder \fIarg\fP genannt. .P Durch die Verwendung von \fBioctl\fP entstehen nichtportierbare Programme. Verwenden Sie die POSIX\-Schnittstelle, wie in \fBtermios\fP(3) beschrieben, wann immer möglich. .P Bitte beachten Sie, dass \fBstruct termios\fP aus \fI\fP anders und inkompatibel zu \fBstruct termios\fP aus \fI\fP ist. Diese Ioctl\-Aufrufe benötigen \fBstruct termios\fP aus \fI\fP. .SS "Terminal\-Attribute ermitteln und setzen" .TP \fBTCGETS\fP Argument: \fBstruct termios\ *\fP\fIargp\fP .IP äquivalent zu \fItcgetattr(dd, argp)\fP .IP Einstellungen der aktuellen seriellen Schnittstelle ermitteln .TP \fBTCSETS\fP Argument: \fBconst struct termios\ *\fP\fIargp\fP .IP äquivalent zu \fItcsetattr(dd, TCSANOW, argp)\fP .IP Einstellungen der aktuellen seriellen Schnittstelle setzen .TP \fBTCSETSW\fP Argument: \fBconst struct termios\ *\fP\fIargp\fP .IP äquivalent zu \fItcsetattr(dd, TCSADRAIN, argp)\fP .IP Erlaubt dem Ausgabepuffer, leerzulaufen, und setzt die aktuellen Einstellungen serieller Ports. .TP \fBTCSETSF\fP Argument: \fBconst struct termios\ *\fP\fIargp\fP .IP äquivalent zu \fItcsetattr(dd, TCSAFLUSH, argp)\fP .IP Erlaubt dem Ausgabepuffer, leerzulaufen, verwirft wartende Eingaben und setzt die aktuellen Einstellungen serieller Ports. .P .\" commit 64bb6c5e1ddcd47c951740485026ef08975ee2e6 .\" commit 592ee3a5e5e2a981ef2829a0380093006d045661 Die folgenden vier, in Linux 2.6.20 hinzugefügten Ioctls, sind genau wie \fBTCGETS\fP, \fBTCSETS\fP, \fBTCSETSW\fP, \fBTCSETSF\fP, außer dass sie ein \fIstruct termios2\ *\fP statt eines \fIstruct termios\ *\fP akzeptieren. Falls das Strukturmitglied \fBc_cflag\fP den Schalter \fBBOTHER\fP enthält, wird die Baud\-Rate in den Strukturmitgliedern \fBc_ispeed\fP und \fBc_ospeed\fP als Ganzzahlwerte gespeichert. Diese Ioctls werden nicht auf allen Architekturen unterstützt. .RS .TS lb l. TCGETS2 \fBstruct termios2 *\fPargp TCSETS2 \fBconst struct termios2 *\fPargp TCSETSW2 \fBconst struct termios2 *\fPargp TCSETSF2 \fBconst struct termios2 *\fPargp .TE .RE .P Die folgenden vier Ioctls sind genau wie \fBTCGETS\fP, \fBTCSETS\fP, \fBTCSETSW\fP, \fBTCSETSF\fP, außer dass sie ein \fIstruct termio\ *\fP statt eines \fIstruct termios\ *\fP erwarten. .RS .TS lb l. TCGETA \fBstruct termio *\fPargp TCSETA \fBconst struct termio *\fPargp TCSETAW \fBconst struct termio *\fPargp TCSETAF \fBconst struct termio *\fPargp .TE .RE .SS "Sperren der Struktur Termios" Die Struktur \fItermios\fP eines Terminals kann gesperrt werden. Die Sperre ist selbst eine Struktur \fItermios\fP, bei der von Null verschiedene Bits die gesperrten Werte anzeigen. .TP \fBTIOCGLCKTRMIOS\fP Argument: \fBstruct termios\ *\fP\fIargp\fP .IP Ermittelt den Status der Sperren der Struktur \fItermios\fP des Terminals. .TP \fBTIOCSLCKTRMIOS\fP Argument: \fBconst struct termios\ *\fP\fIargp\fP .IP Setzt den Status der Sperren der Struktur \fItermios\fP des Terminals. Nur Prozesse mit der Capability \fBCAP_SYS_ADMIN\fP können dies tun. .SS "Fenstergröße ermitteln und setzen" Fenstergrößen werden im Kernel gehalten, dort aber nicht verwandt (außer im Falle der virtuellen Konsolen, bei denen der Kernel die Fenstergrößen aktualisiert, wenn sich die Größe der virtuellen Konsolen ändert, beispielsweise durch Laden einer neuen Schriftart). .TP \fBTIOCGWINSZ\fP Argument: \fBstruct winsize\ *\fP\fIargp\fP .IP Fenstergröße ermitteln. .TP \fBTIOCSWINSZ\fP Argument: \fBconst struct winsize\ *\fP\fIargp\fP .IP Fenstergröße setzen. .P Das von diesen Ioctls verwandte Struct ist wie folgt definiert: .P .in +4n .EX struct winsize { unsigned short ws_row; unsigned short ws_col; unsigned short ws_xpixel; /* unbenutzt */ unsigned short ws_ypixel; /* unbenutzt */ }; .EE .in .P Wenn sich die Fenstergröße ändert, wird das Signal \fBSIGWINCH\fP an die Vordergrund\-Prozessgruppe gesandt. .SS "Senden einer Unterbrechung" .TP \fBTCSBRK\fP Argument: \fBint \fP\fIarg\fP .IP äquivalent zu \fItcsendbreak(dd, arg)\fP .IP Falls das Terminal asynchrone Datenübertragung verwendet und \fIarg\fP Null ist, wird eine Unterbrechung (ein Strom von Null\-Bits) für 0,25\-0,5 Sekunden gesandt. Falls das Terminal keine asynchrone serielle Datenübertragung verwendet, wird entweder eine Unterbrechung gesandt oder die Funktion kehrt ohne Aktion zurück. Falls \fIarg\fP nicht Null ist, ist die Aktion undefiniert. .IP (SVr4, UnixWare, Solaris und Linux behandeln \fItcsendbreak(dd,arg)\fP mit von Null verschiedenem \fIarg\fP wie \fItcdrain(dd)\fP. SunOS behandelt \fIarg\fP als Multiplikator und schickt einen Bitstrom, der \fIarg\fP\-mal so lang wie bei \fIarg\fP gleich Null ist. DG/UX und AIX behandeln \fIarg\fP (wenn von Null verschieden) als Zeitintervall in Millisekunden. HP\-UX ignoriert \fIarg\fP.) .TP \fBTCSBRKP\fP Argument: \fBint \fP\fIarg\fP .IP Sogenannte »POSIX\-Version« von \fBTCSBRK\fP. Sie behandelt von Null verschiedene \fIarg\fP als in Dezisekunden gemessenes Zeitintervall und führt nichts aus, falls der Treiber keine Unterbrechungen unterstützt. .TP \fBTIOCSBRK\fP Argument: \fBvoid\fP .IP Schaltet Unterbrechungen ein, d.h. beginnt das Senden von Null\-Bits. .TP \fBTIOCCBRK\fP Argument: \fBvoid\fP .IP Schaltet Unterbrechungen aus, d.h. beendet das Senden von Null\-Bits. .SS Software\-Flusssteuerung .TP \fBTCXONC\fP Argument: \fBint \fP\fIarg\fP .IP äquivalent zu \fItcflow(dd, arg)\fP .IP siehe \fBtcflow\fP(3) für die Argumentwerte \fBTCOOFF\fP, \fBTCOON\fP, \fBTCIOFF\fP, \fBTCION\fP .SS "Pufferzählung und \-leerung" .TP \fBFIONREAD\fP Argument: \fBint\ *\fP\fIargp\fP .IP Die Anzahl der Bytes im Eingabepuffer ermitteln. .TP \fBTIOCINQ\fP Argument: \fBint\ *\fP\fIargp\fP .IP identisch zu \fBFIONREAD\fP .TP \fBTIOCOUTQ\fP Argument: \fBint\ *\fP\fIargp\fP .IP Die Anzahl der Bytes im Ausgabepuffer ermitteln. .TP \fBTCFLSH\fP Argument: \fBint \fP\fIarg\fP .IP äquivalent zu \fItcflush(dd, arg)\fP .IP siehe \fBtcflush\fP(3) für die Argumentwerte \fBTCIFLUSH\fP, \fBTCOFLUSH\fP und \fBTCIOFLUSH\fP .TP \fBTIOCSERGETLSR\fP Argument: \fBint\ *\fP\fIargp\fP .IP Verbindungsstatusregister ermitteln. Statusregister hat das Bit \fBTIOCSER_TEMT\fP gesetzt, wenn der Ausgabepuffer leer ist und auch der Hardware\-Sender physisch leer ist. .IP Muss nicht von allen seriellen TTY\-Treibern unterstützt werden. .IP Wenn das Bit \fBTIOCSER_TEMT\fP gesetzt ist, wartet \fBtcdrain\fP(3) nicht und kehrt sofort zurück. .SS "Eingabe vortäuschen" .TP \fBTIOCSTI\fP Argument: \fBconst char\ *\fP\fIargp\fP .IP Das angegebene Byte in die Eingabewarteschlange einfügen. .IP .\" commit 690c8b804ad2eafbd35da5d3c95ad325ca7d5061 .\" commit 83efeeeb3d04b22aaed1df99bc70a48fe9d22c4d Seit Linux 6.2 könnte diese Aktion die Capability \fBCAP_SYS_ADMIN\fP benötigen (falls die Sysctl\-Variable \fIdev.tty.legacy_tiocsti\fP auf »false« gesetzt ist). .SS "Konsolenausgabe umleiten" .TP \fBTIOCCONS\fP Argument: \fBvoid\fP .IP Lenkt die Ausgabe, die an \fI/dev/console\fP oder \fI/dev/tty0\fP gegangen wäre, an das angegebene Terminal um. Falls das ein Pseudoterminal\-Master war, sende es an den Slave. Vor Linux 2.6.10 kann dies jeder tun, solange die Ausgabe noch nicht umgeleitet worden war; seit Linux 2.6.10 kann dies nur ein Prozess mit der Capability \fBCAP_SYS_ADMIN\fP tun. Falls die Ausgabe bereits umgeleitet worden war, wird \fBEBUSY\fP zurückgeliefert. Die Umleitung kann aber beendet werden, indem Ioctl mit einem \fIdd\fP, der auf \fI/dev/console\fP oder \fI/dev/tty0\fP zeigt, verwandt wird. .SS "Steuerndes Terminal" .TP \fBTIOCSCTTY\fP Argument: \fBint \fP\fIarg\fP .IP Macht das angegebene Terminal zum steuernden Terminal des aufrufenden Prozesses. Der aufrufende Prozess muss ein Sitzungsleiter sein und darf noch kein steuerndes Terminal haben. Für diesen Fall sollte \fIarg\fP als Null angegeben werden. .IP Falls dieses Terminal bereits das steuernde Terminal einer anderen Sitzungsgruppe ist, schlägt der Ioctl mit \fBEPERM\fP fehl. Verfügt der Aufrufende allerdings über die Capability \fBCAP_SYS_ADMIN\fP und ist \fIarg\fP 1, dann wird das Terminal gestohlen und alle Prozesse, die es als steuerndes Terminal hatten, verlieren es. .TP \fBTIOCNOTTY\fP Argument: \fBvoid\fP .IP Falls das angegebene Terminal das steuernde Terminal des aufrufenden Prozesses war, wird dieses steuernde Terminal aufgegeben. Falls der Prozess der Sitzungsleiter war, dann wird \fBSIGHUP\fP und \fBSIGCONT\fP zu der Vordergrundprozessgruppe gesandt und alle Prozesse in der aktuellen Sitzung verlieren ihr steuerndes Terminal. .SS "Prozessgruppen\- und \-sitzungskennung" .TP \fBTIOCGPGRP\fP Argument: \fBpid_t\ *\fP\fIargp\fP .IP wenn erfolgreich, äquivalent zu \fI*argp = tcgetpgrp(dd)\fP .IP Die Prozessgruppenkennung der Vordergrundprozessgruppe auf diesem Terminal ermitteln. .TP \fBTIOCSPGRP\fP Argument: \fBconst pid_t\ *\fP\fIargp\fP .IP äquivalent zu \fItcsetpgrp(dd, *argp)\fP .IP Die Vordergrundprozessgruppenkennung dieses Terminals setzen. .TP \fBTIOCGSID\fP Argument: \fBpid_t\ *\fP\fIargp\fP .IP wenn erfolgreich, äquivalent zu \fI*argp = tcgetsid(dd)\fP .IP Ermittelt die Sitzungskennung des angegebenen Terminals. Dies schlägt mit dem Fehler \fBENOTTY\fP fehl, falls das Terminal kein Master\-Pseudoterminal und nicht unser steuerndes Terminal ist. Merkwürdig. .SS "Exklusiver Modus" .TP \fBTIOCEXCL\fP Argument: \fBvoid\fP .IP Setzt das Terminal in den exklusiven Modus. Es sind keine weiteren \fBopen\fP(2)\-Aktionen auf dem Terminal erlaubt. (Sie schlagen mit \fBEBUSY\fP fehl, außer der Prozess hat die Capability \fBCAP_SYS_ADMIN\fP.) .TP \fBTIOCGEXCL\fP Argument: \fBint\ *\fP\fIargp\fP .IP (Seit Linux 3.8) Falls sich das Terminal momentan im exklusiven Modus befindet, wird ein von Null verschiedener Wert in den durch \fIargp\fP angezeigten Ort gelegt; andernfalls wird Null in \fI*argp\fP gelegt. .TP \fBTIOCNXCL\fP Argument: \fBvoid\fP .IP exklusiven Modus deaktivieren .SS Verbindungsmodus .TP \fBTIOCGETD\fP Argument: \fBint\ *\fP\fIargp\fP .IP Ermittelt den Verbindungsmodus des Terminals. .TP \fBTIOCSETD\fP Argument: \fBconst int\ *\fP\fIargp\fP .IP Setzt den Verbindungsmodus des Terminals. .SS Pseudoterminal\-Ioctls .TP \fBTIOCPKT\fP Argument: \fBconst int\ *\fP\fIargp\fP .IP Aktiviert (wenn *\fIargp\fP von Null verschieden ist) oder deaktiviert den Paketmodus. Kann nur auf die Master\-Seite eines Pseudoterminals angewandt werden (und liefert andernfalls \fBENOTTY\fP zurück). Im Paketmodus wird jeder nachfolgende Schreibvorgang ein Paket zurückliefern, das ein einzelnes, von Null verschiedenes Steuerbyte oder ein einzelnes Byte, das Zero (»\e0«), gefolgt von den auf der Slave\-Seite des Pseudoterminals geschriebenen Daten, enthält. Falls das erste Byte nicht \fBTIOCPKT_DATA\fP (0) ist, ist es eine ODER\-Verknüpfung eines oder mehrerer der folgenden Bits: .IP .ad l .TS lb l. TIOCPKT_FLUSHREAD T{ Die Lese\-Warteschlange für das Terminal wird geleert. T} TIOCPKT_FLUSHWRITE T{ Die Schreibe\-Warteschlange für das Terminal wird geleert. T} TIOCPKT_STOP T{ Ausgabe an das Terminal ist gestoppt. T} TIOCPKT_START T{ Ausgabe an das Terminal ist neu gestartet. T} TIOCPKT_DOSTOP T{ Die Start\- und Stoppzeichen sind \fB\[ha]S\fP/\fB\[ha]Q\fP. T} TIOCPKT_NOSTOP T{ Die Start\- und Stoppzeichen sind nicht \fB\[ha]S\fP/\fB\[ha]Q\fP. T} .TE .ad .IP Während der Paketmodus verwandt wird, kann die Anwesenheit von Steuerstatusinformationen, die von der Master\-Seite gelesen werden sollen, für außergewöhnliche Bedingungen durch ein \fBselect\fP(2) oder ein \fBpoll\fP(2) für das Ereignis \fBPOLLPRI\fP erkannt werden. .IP Dieser Modus wird von \fBrlogin\fP(1) und \fBrlogind\fP(8) benutzt, um eine Anmeldung mit Ausgabe in der Ferne und lokaler \fB\[ha]S\fP/\fB\[ha]Q\fP\-Flusssteuerung zu implementieren. .TP \fBTIOCGPKT\fP Argument: \fBconst int\ *\fP\fIargp\fP .IP (Seit Linux 3.8) Liefert die aktuelle Paketmoduseinstellung in der Ganzzahl, auf die \fIargp\fP zeigt, zurück. .TP \fBTIOCSPTLCK\fP Argument: \fBint\ *\fP\fIargp\fP .IP Setzt (falls \fI*argp\fP von Null verschieden ist) oder entfernt (falls \fI*argp\fP Null ist) die Sperre auf dem Pseudoterminal\-Slave\-Gerät. (Siehe auch \fBunlockpt\fP(3).) .TP \fBTIOCGPTLCK\fP Argument: \fBint\ *\fP\fIargp\fP .IP (Seit Linux 3.8) Legt den aktuellen Sperrstatus des Pseudoterminal\-Slave\-Geräts in den durch \fIargp\fP verwiesenen Ort. .TP \fBTIOCGPTPEER\fP Argument: \fBint \fP\fISchalter\fP .IP .\" commit 54ebbfb1603415d9953c150535850d30609ef077 (Seit Linux 4.13) Ist ein Dateideskriptor in \fIdd\fP gegeben, der sich auf ein Pseudoterminal\-Master bezieht, wird dieser (mit den angegebenen \fBopen\fP(2)\-artigen \fISchalter\fP) geöffnet und ein neuer Datei\-Deskriptor, der sich auf ein Peer\-Pseudoterminal\-Slave\-Gerät bezieht, zurückgeliefert. Diese Aktion kann unabhängig davon durchgeführt werden, ob der Pfadname des Slave\-Gerätes über den Einhängenamensraum des aufrufenden Prozesses zugreifbar ist. .IP Sicherheitsbewusste Anwendungen, die mit Namensräumen interagieren, könnten diese Aktionen statt \fBopen\fP(2) mit von \fBptsname\fP(3) zurückgelieferten Pfadnamen und ähnliche Bibliotheksfunktionen, die unsichere APIs haben, benutzen. (Beispielsweise kann es in einigen Fällen bei der Verwendung von \fBptsname\fP(3) mit einem Pfadnamen, bei dem ein Devpts\-Dateisystem in einem anderen Einhängenamensraum eingehängt wurde, zur Verwirrung kommen.) .P Die BSD\-Ioctls \fBTIOCSTOP\fP, \fBTIOCSTART\fP, \fBTIOCUCNTL\fP und \fBTIOCREMOTE\fP wurden unter Linux nicht implementiert. .SS Modem\-Steuerung .TP \fBTIOCMGET\fP Argument: \fBint\ *\fP\fIargp\fP .IP Den Status der Modem\-Bits ermitteln. .TP \fBTIOCMSET\fP Argument: \fBconst int\ *\fP\fIargp\fP .IP Den Status der Modem\-Bits setzen. .TP \fBTIOCMBIC\fP Argument: \fBconst int\ *\fP\fIargp\fP .IP Die angegebenen Modem\-Bits zurücksetzen. .TP \fBTIOCMBIS\fP Argument: \fBconst int\ *\fP\fIargp\fP .IP Die angegebenen Modem\-Bits setzen. .P Die folgenden Bits werden von den obigen Ioctls verwandt: .P .TS lb l. TIOCM_LE DSR (Datensatz bereit/Leitung aktiv) TIOCM_DTR DTR (Datenterminal bereit) TIOCM_RTS RTS (Bitte um Senden) TIOCM_ST Sekundärer TXD (Übertragung) TIOCM_SR Sekundärer RXD (Empfang) TIOCM_CTS CTS (klar zum Senden) TIOCM_CAR DCD (Datenträger\-Erkennung) TIOCM_CD siehe TIOCM_CAR TIOCM_RNG RNG (Läuten) TIOCM_RI siehe TIOCM_RNG TIOCM_DSR DSR (Datensatz bereit) .TE .TP \fBTIOCMIWAIT\fP Argument: \fBint \fP\fIarg\fP .IP Wartet auf die Änderung eines der 4 Modem\-Bits (DCD, RI, DSR, CTS). Die Bits von Interesse werden als Bitmaske in \fIarg\fP angegeben, indem jedes der Bit\-Werte (\fBTIOCM_RNG\fP, \fBTIOCM_DSR\fP, \fBTIOCM_CD\fP und \fBTIOCM_CTS\fP) mit ODER verknüpft wird. Der Aufrufende sollte \fBTIOCGICOUNT\fP verwenden, um zu schauen, welches Bit sich geändert hat. .TP \fBTIOCGICOUNT\fP Argument: \fBstruct serial_icounter_struct\ *\fP\fIargp\fP .IP Ermittelt die Anzahl der Interrupts der seriellen Eingabeleitung (DCD, RI, DSR, CTS). Die Anzahl wird in die durch \fIargp\fP verwiesene Struktur \fIserial_icounter_struct\fP geschrieben. .IP Hinweis: Sowohl 1\->0\- als auch 0\->1\-Übergänge werden gezählt, außer für RI, bei dem nur 0\->1\-Übergänge gezählt werden. .SS "Eine Leitung als lokal kennzeichnen" .TP \fBTIOCGSOFTCAR\fP Argument: \fBint\ *\fP\fIargp\fP .IP (»Get software carrier flag«) Ermittelt den Status des Schalters CLOCAL im Feld c_cflag der Struktur \fItermios\fP. .TP \fBTIOCSSOFTCAR\fP Argument: \fBconst int\ *\fP\fIargp\fP .IP (»Set software carrier flag«) Setzt den Schalter CLOCAL in der Struktur \fItermios\fP, wenn *\fIargp\fP von Null verschieden ist, und bereinigt ihn andernfalls. .P Falls der Schalter \fBCLOCAL\fP für eine Leitung ausgeschaltet ist, dann ist das Hardware\-Trägererkennung\- (DCD\-)Signal bedeutend, und ein \fBopen\fP(2) des entsprechenden Terminals wird blockieren, bis DCD festgestellt wurde, und die Leitung verhält sich so, als ob DCD immer festgestellt worden wäre. Der Software\-Träger\-Schalter wird normalerweise für lokale Geräte eingeschaltet und ist für Leitungen mit Modems ausgeschaltet. .SS Linux\-spezifisch Für den \fBTIOCLINUX\fP\-Ioctl, siehe \fBioctl_console\fP(2). .SS Kernel\-Fehlersuche \fB#include \fP .TP \fBTIOCTTYGSTRUCT\fP Argument: \fBstruct tty_struct\ *\fP\fIargp\fP .IP .\" commit b3506a09d15dc5aee6d4bb88d759b157016e1864 .\" Author: Andries E. Brouwer .\" Date: Tue Apr 1 04:42:46 2003 -0800 .\" .\" [PATCH] kill TIOCTTYGSTRUCT .\" .\" Only used for (dubious) debugging purposes, and exposes .\" internal kernel state. .\" .\" .SS Serial info .\" .BR "#include " .\" .P .\" .TP .\" .BI "TIOCGSERIAL struct serial_struct *" argp .\" Get serial info. .\" .TP .\" .BI "TIOCSSERIAL const struct serial_struct *" argp .\" Set serial info. Die \fIdd\fP entsprechende \fItty_struct\fP ermitteln. Diese Aktion wurde in Linux 2.5.67 entfernt. .SH RÜCKGABEWERT Der Systemaufruf \fBioctl\fP(2) liefert im Erfolgsfall 0 zurück. Bei einem Fehler wird \-1 zurückgegeben und \fIerrno\fP gesetzt, um den Fehler anzuzeigen. .SH FEHLER .TP \fBEINVAL\fP Ungültiger Aktionsparameter. .TP \fBENOIOCTLCMD\fP Unbekannte Aktion. .TP \fBENOTTY\fP Ungeeigneter \fIdd\fP. .TP \fBEPERM\fP Unzureichende Berechtigung. .SH BEISPIELE Die Bedingungen von DTR auf dem seriellen Port prüfen. .P .\" SRC BEGIN (tiocmget.c) .EX #include #include #include #include \& int main(void) { int fd, serial; \& fd = open("/dev/ttyS0", O_RDONLY); ioctl(fd, TIOCMGET, &serial); if (serial & TIOCM_DTR) puts("TIOCM_DTR ist gesetzt"); else puts("TIOCM_DTR ist nicht gesetzt"); close(fd); } .EE .\" SRC END .P Baud\-Rate auf dem seriellen Port ermitteln oder setzen. .P .\" SRC BEGIN (tcgets.c) .EX /* SPDX\-License\-Identifier: GPL\-2.0\-or\-later */ \& #include #include #include #include #include #include \& int main(int argc, char *argv[]) { #if !defined BOTHER fprintf(stderr, "BOTHER wird nicht unterstützt\en"); /* Program kann auf TCGETS/TCSETS mit Bnnn\-Konstanten zurückfallen */ exit(EXIT_FAILURE); #else /* tio\-Struktur deklarieren, ihr Typ hängt vom unterstützten Ioctl ab */ # if defined TCGETS2 struct termios2 tio; # else struct termios tio; # endif int fd, rc; \& if (argc != 2 && argc != 3 && argc != 4) { fprintf(stderr, "Aufruf: %s Gerät [Ausgabe [Eingabe] ]\en", argv[0]); exit(EXIT_FAILURE); } \& fd = open(argv[1], O_RDWR | O_NONBLOCK | O_NOCTTY); if (fd < 0) { perror("open"); exit(EXIT_FAILURE); } \& /* Die aktuellen Einstellungen des seriellen Ports mittels unterstütztem Ioctl ermitteln */ # if defined TCGETS2 rc = ioctl(fd, TCGETS2, &tio); # else rc = ioctl(fd, TCGETS, &tio); # endif if (rc) { perror("TCGETS"); close(fd); exit(EXIT_FAILURE); } \& /* Die Baud\-Rate ändern, wenn mehr Argumente bereitgestellt wurden */ if (argc == 3 || argc == 4) { /* Aktuelle Baud\-Rate bereinigen und einen neuen Wert einfüllen */ tio.c_cflag &= \[ti]CBAUD; tio.c_cflag |= BOTHER; tio.c_ospeed = atoi(argv[2]); \& /* Die aktuelle Eingabe\-Baud\-Rate bereinigen und einen neuen Wert einfüllen */ tio.c_cflag &= \[ti](CBAUD << IBSHIFT); tio.c_cflag |= BOTHER << IBSHIFT; /* Falls das 4. Argument nicht bereitgestellt wurde, Ausgabe\-Baud\-Rate nochmals verwenden */ tio.c_ispeed = (argc == 4) ? atoi(argv[3]) : atoi(argv[2]); \& /* Neue Einstellungen des seriellen Ports mittels unterstütztem Ioctl setzen */ # if defined TCSETS2 rc = ioctl(fd, TCSETS2, &tio); # else rc = ioctl(fd, TCSETS, &tio); # endif if (rc) { perror("TCSETS"); close(fd); exit(EXIT_FAILURE); } \& /* Und die neuen Werte erhalten, die wirklich konfiguriert wurden */ # if defined TCGETS2 rc = ioctl(fd, TCGETS2, &tio); # else rc = ioctl(fd, TCGETS, &tio); # endif if (rc) { perror("TCGETS"); close(fd); exit(EXIT_FAILURE); } } \& close(fd); \& printf("Ausgabe\-Baud\-Rate: %u\en", tio.c_ospeed); printf("Eingabe\-Baud\-Rate: %u\en", tio.c_ispeed); \& exit(EXIT_SUCCESS); #endif } .EE .\" SRC END .SH "SIEHE AUCH" \fBldattach\fP(8), \fBioctl\fP(2), \fBioctl_console\fP(2), \fBtermios\fP(3), \fBpty\fP(7) .\" .\" FIONBIO const int * .\" FIONCLEX void .\" FIOCLEX void .\" FIOASYNC const int * .\" from serial.c: .\" TIOCSERCONFIG void .\" TIOCSERGWILD int * .\" TIOCSERSWILD const int * .\" TIOCSERGSTRUCT struct async_struct * .\" TIOCSERGETMULTI struct serial_multiport_struct * .\" TIOCSERSETMULTI const struct serial_multiport_struct * .\" TIOCGSERIAL, TIOCSSERIAL (see above) .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .