Provided by: manpages-de-dev_4.15.0-9_all bug

BEZEICHNUNG

       ioctl_tty - Ioctls für Terminals und serielle Leitungen

ÜBERSICHT

       #include <sys/ioctl.h>
       #include <termios.h>      /* Definition der Konstanten CLOCAL
                                      und TC*{FLUSH,ON,OFF} */

       int ioctl(int dd, int Bef, …);

BESCHREIBUNG

       Der   ioctl(2)-Aufruf   für   Terminals  und  serielle  Ports  akzeptiert  viele  mögliche
       Befehlzeilenargumente. Die meisten erwarten ein drittes Argument, von  verschiedenem  Typ,
       hier argp oder arg genannt.

       Durch  die  Verwendung  von  ioctl entstehen nichtportierbare Programme. Verwenden Sie die
       POSIX-Schnittstelle, wie in termios(3) beschrieben, wann immer möglich.

   Terminal-Attribute ermitteln und setzen
       TCGETS Argument: struct termios *argp

              äquivalent zu tcgetattr(dd, argp)

              Einstellungen der aktuellen seriellen Schnittstelle ermitteln

       TCSETS Argument: const struct termios *argp

              äquivalent zu tcsetattr(dd, TCSANOW, argp)

              Einstellungen der aktuellen seriellen Schnittstelle setzen

       TCSETSW
              Argument: const struct termios *argp

              äquivalent zu tcsetattr(dd, TCSADRAIN, argp)

              Erlaubt dem Ausgabepuffer, leerzulaufen,  und  setzt  die  aktuellen  Einstellungen
              serieller Ports.

       TCSETSF
              Argument: const struct termios *argp

              äquivalent zu tcsetattr(dd, TCSAFLUSH, argp)

              Erlaubt  dem  Ausgabepuffer, leerzulaufen, verwirft wartende Eingaben und setzt die
              aktuellen Einstellungen serieller Ports.

       Die folgenden vier, in Linux 2.6.20 hinzugefügten Ioctls, sind genau wie  TCGETS,  TCSETS,
       TCSETSW,  TCSETSF,  außer  dass  sie  ein  struct  termios2 * statt eines struct termios *
       akzeptieren. Falls das Strukturmitglied c_cflag den  Schalter  BOTHER  enthält,  wird  die
       Baud-Rate  in den Strukturmitgliedern c_ispeed und c_ospeed als Ganzzahlwerte gespeichert.
       Diese Ioctls werden nicht auf allen Architekturen unterstützt.

              TCGETS2    struct termios2 *argp
              TCSETS2    const struct termios2 *argp
              TCSETSW2   const struct termios2 *argp
              TCSETSF2   const struct termios2 *argp

       Die folgenden vier Ioctls sind genau wie TCGETS, TCSETS, TCSETSW, TCSETSF, außer dass  Sie
       ein struct termio * statt eines struct termios * erwarten.

              TCGETA    struct termio *argp
              TCSETA    const struct termio *argp
              TCSETAW   const struct termio *argp
              TCSETAF   const struct termio *argp

   Sperren der Struktur Termios
       Die  Struktur  termios  eines  Terminals  kann gesperrt werden. Die Sperre ist selbst eine
       Struktur termios, bei der von Null verschiedene Bits die gesperrten Werte anzeigen.

       TIOCGLCKTRMIOS
              Argument: struct termios *argp

              Ermittelt den Status der Sperren der Struktur termios des Terminals.

       TIOCSLCKTRMIOS
              Argument: const struct termios *argp

              Setzt den Status der Sperren der Struktur termios des Terminals. Nur  Prozesse  mit
              der Capability CAP_SYS_ADMIN können dies tun.

   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).

       TIOCGWINSZ
              Argument: struct winsize *argp

              Fenstergröße ermitteln.

       TIOCSWINSZ
              Argument: const struct winsize *argp

              Fenstergröße setzen.

       Das von diesen Ioctls verwandte Struct ist wie folgt definiert:

           struct winsize {
               unsigned short ws_row;
               unsigned short ws_col;
               unsigned short ws_xpixel;   /* unbenutzt */
               unsigned short ws_ypixel;   /* unbenutzt */
           };

       Wenn    sich    die    Fenstergröße    ändert,   wird   das   Signal   SIGWINCH   an   die
       Vordergrund-Prozessgruppe gesandt.

   Senden einer Unterbrechung
       TCSBRK Argument: int arg

              äquivalent zu tcsendbreak(dd, arg)

              Falls das Terminal asynchrone Datenübertragung verwendet und  arg  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 arg
              nicht Null ist, ist die Aktion undefiniert.

              (SVr4, UnixWare, Solaris und  Linux  behandeln  tcsendbreak(dd,arg)  mit  von  Null
              verschiedenem  arg  wie  tcdrain(dd).  SunOS  behandelt  arg  als Multiplikator und
              schickt einen Bitstrom, der arg-mal so lang wie bei arg gleich Null ist. DG/UX  und
              AIX  behandeln  arg (wenn von Null verschieden) als Zeitintervall in Millisekunden.
              HP-UX ignoriert arg.)

       TCSBRKP
              Argument: int arg

              Sogenannte »POSIX-Version« von TCSBRK. Sie behandelt von Null verschiedene arg  als
              in  Dezisekunden  gemessenes  Zeitintervall und führt nichts aus, falls der Treiber
              keine Unterbrechungen unterstützt.

       TIOCSBRK
              Argument: void

              Schaltet Unterbrechungen ein, d.h. beginnt das Senden von Null-Bits.

       TIOCCBRK
              Argument: void

              Schaltet Unterbrechungen aus, d.h. beendet das Senden von Null-Bits.

   Software-Flusssteuerung
       TCXONC Argument: int arg

              äquivalent zu tcflow(dd, arg)

              siehe tcflow(3) für die Argumentwerte TCOOFF, TCOON, TCIOFF, TCION

   Pufferzählung und -leerung
       FIONREAD
              Argument: int *argp

              Die Anzahl der Bytes im Eingabepuffer ermitteln.

       TIOCINQ
              Argument: int *argp

              identisch zu FIONREAD

       TIOCOUTQ
              Argument: int *argp

              Die Anzahl der Bytes im Ausgabepuffer ermitteln.

       TCFLSH Argument: int arg

              äquivalent zu tcflush(dd, arg)

              siehe tcflush(3) für die Argumentwerte TCIFLUSH, TCOFLUSH und TCIOFLUSH

   Eingabe vortäuschen
       TIOCSTI
              Argument: const char *argp

              Das angegebene Byte in die Eingabewarteschlange einfügen.

   Konsolenausgabe umleiten
       TIOCCONS
              Argument: void

              Lenkt die Ausgabe, die  an  /dev/console  oder  /dev/tty0  gegangen  wäre,  an  das
              angegebene  Terminal  um.  Falls das ein Pseudoterminal-Master war, sende es an den
              Slave. Unter Linux kann dies vor Version 2.6.10 jeder tun, solange die Ausgabe noch
              nicht  umgeleitet worden war; seit Version 2.6.10 kann dies nur ein Prozess mit der
              Capability CAP_SYS_ADMIN tun. Falls die Ausgabe bereits umgeleitet worden war, wird
              EBUSY  zurückgeliefert.  Die  Umleitung  kann  aber beendet werden, indem Ioctl mit
              einem dd, der auf /dev/console oder /dev/tty0 zeigt, verwandt wird.

   Steuerndes Terminal
       TIOCSCTTY
              Argument: int arg

              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 arg als Null angegeben werden.

              Falls dieses Terminal bereits das steuernde Terminal einer  anderen  Sitzungsgruppe
              ist,  schlägt  der Ioctl mit EPERM fehl. Verfügt der Aufrufende allerdings über die
              Capability CAP_SYS_ADMIN und ist arg 1, dann wird das Terminal gestohlen  und  alle
              Prozesse, die es als steuerndes Terminal hatten, verlieren es.

       TIOCNOTTY
              Argument: void

              Falls das angegebene Terminal das steuernde Terminal des aufrufenden Prozesses war,
              wird dieses steuernde Terminal aufgegeben. Falls  der  Prozess  der  Sitzungsleiter
              war,  dann wird SIGHUP und SIGCONT zu der Vordergrundprozessgruppe gesandt und alle
              Prozesse in der aktuellen Sitzung verlieren ihr steuerndes Terminal.

   Prozessgruppen- und -sitzungskennung
       TIOCGPGRP
              Argument: pid_t *argp

              wenn erfolgreich, äquivalent zu *argp = tcgetpgrp(dd)

              Die  Prozessgruppenkennung  der  Vordergrundprozessgruppe   auf   diesem   Terminal
              ermitteln.

       TIOCSPGRP
              Argument: const pid_t *argp

              äquivalent zu tcsetpgrp(dd, *argp)

              Die Vordergrundprozessgruppenkennung dieses Terminals setzen.

       TIOCGSID
              Argument: pid_t *argp

              Ermittelt  die  Sitzungskennung  des  angegebenen  Terminals.  Dies schlägt mit dem
              Fehler ENOTTY fehl, falls das Terminal kein Master-Pseudoterminal und  nicht  unser
              steuerndes Terminal ist. Merkwürdig.

   Exklusiver Modus
       TIOCEXCL
              Argument: void

              Setzt das Terminal in den exklusiven Modus. Es sind keine weiteren open(2)-Aktionen
              auf dem Terminal erlaubt. (Sie schlagen mit EBUSY fehl, außer der Prozess  hat  die
              Capability CAP_SYS_ADMIN.)

       TIOCGEXCL
              Argument: int *argp

              (Seit  Linux  3.8)  Falls  sich das Terminal momentan im exklusiven Modus befindet,
              wird ein von Null verschiedener Wert in den  durch  argp  angezeigten  Ort  gelegt;
              andernfalls wird Null in *argp gelegt.

       TIOCNXCL
              Argument: void

              exklusiven Modus deaktivieren

   Verbindungsmodus
       TIOCGETD
              Argument: int *argp

              Ermittelt den Verbindungsmodus des Terminals.

       TIOCSETD
              Argument: const int *argp

              Setzt den Verbindungsmodus des Terminals.

   Pseudoterminal-Ioctls
       TIOCPKT
              Argument: const int *argp

              Aktiviert  (wenn  *argp  von Null verschieden ist) oder deaktiviert den Paketmodus.
              Kann nur auf die Master-Seite eines Pseudoterminals angewandt werden  (und  liefert
              andernfalls  ENOTTY  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  (»\0«),  gefolgt  von den auf der Slave-Seite des
              Pseudoterminals  geschriebenen  Daten,  enthält.  Falls  das   erste   Byte   nicht
              TIOCPKT_DATA  (0)  ist,  ist  es  eine  ODER-Verknüpfung  eines  oder  mehrerer der
              folgenden Bits:

              TIOCPKT_FLUSHREAD    Die Lese-Warteschlange für das
                                   Terminal wird geleert.
              TIOCPKT_FLUSHWRITE   Die Schreibe-Warteschlange für
                                   das Terminal wird geleert.
              TIOCPKT_STOP         Ausgabe an das Terminal ist
                                   gestoppt.
              TIOCPKT_START        Ausgabe an das Terminal ist neu
                                   gestartet.
              TIOCPKT_DOSTOP       Die Start- und Stoppzeichen sind
                                   ^S/^Q.
              TIOCPKT_NOSTOP       Die Start- und Stoppzeichen sind
                                   nicht ^S/^Q.

              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 select(2) oder ein poll(2) für das  Ereignis
              POLLPRI erkannt werden.

              Dieser  Modus  wird  von  rlogin(1)  und  rlogind(8) benutzt, um eine Anmeldung mit
              Ausgabe in der Ferne und lokaler ^S/^Q-Flusssteuerung zu implementieren.

       TIOCGPKT
              Argument: const int *argp

              (Seit Linux 3.8) Liefert die aktuelle Paketmoduseinstellung in  der  Ganzzahl,  auf
              die argp zeigt, zurück.

       TIOCSPTLCK
              Argument: int *argp

              Setzt  (falls  *argp von Null verschieden ist) oder entfernt (falls *argp Null ist)
              die Sperre auf dem Pseudoterminal-Slave-Gerät. (Siehe auch unlockpt(3).)

       TIOCGPTLCK
              Argument: int *argp

              (Seit Linux 3.8) Legt den aktuellen Sperrstatus des Pseudoterminal-Slave-Geräts  in
              den durch argp verwiesenen Ort.

       TIOCGPTPEER
              Argument: int Schalter

              (Seit  Linux  4.13)  Ist  ein  Dateideskriptor  in  dd  gegeben,  der  sich auf ein
              Pseudoterminal-Master bezieht, wird dieser  (mit  den  angegebenen  open(2)-artigen
              Schalter)   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.

              Sicherheitsbewusste Anwendungen, die mit Namensräumen interagieren,  könnten  diese
              Aktionen  statt open(2) mit von ptsname(3) zurückgelieferten Pfadnamen und ähnliche
              Bibliotheksfunktionen, die unsichere APIs haben, benutzen. (Beispielsweise kann  es
              in  einigen  Fällen  bei der Verwendung von ptsname(3) mit einem Pfadnamen, bei dem
              ein Devpts-Dateisystem in einem anderen Einhängenamensraum  eingehängt  wurde,  zur
              Verwirrung kommen.)

       Die  BSD-Ioctls  TIOCSTOP,  TIOCSTART,  TIOCUCNTL  und TIOCREMOTE wurden unter Linux nicht
       implementiert.

   Modem-Steuerung
       TIOCMGET
              Argument: int *argp

              Den Status der Modem-Bits ermitteln.

       TIOCMSET
              Argument: const int *argp

              Den Status der Modem-Bits setzen.

       TIOCMBIC
              Argument: const int *argp

              Die angegebenen Modem-Bits zurücksetzen.

       TIOCMBIS
              Argument: const int *argp

              Die angegebenen Modem-Bits setzen.

       Die folgenden Bits werden von den obigen Ioctls verwandt:

       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)

       TIOCMIWAIT
              Argument: int arg

              Wartet auf die Änderung eines der 4 Modem-Bits (DCD, RI, DSR, CTS).  Die  Bits  von
              Interesse  werden  als  Bitmaske  in  arg  angegeben,  indem  jedes  der  Bit-Werte
              (TIOCM_RNG, TIOCM_DSR,  TIOCM_CD  und  TIOCM_CTS)  mit  ODER  verknüpft  wird.  Der
              Aufrufende  sollte  TIOCGICOUNT verwenden, um zu schauen, welches Bit sich geändert
              hat.

       TIOCGICOUNT
              Argument: struct serial_icounter_struct *argp

              Ermittelt die Anzahl der Interrupts der seriellen  Eingabeleitung  (DCD,  RI,  DSR,
              CTS).  Die Anzahl wird in die durch argp verwiesene Struktur serial_icounter_struct
              geschrieben.

              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.

   Eine Leitung als lokal kennzeichnen
       TIOCGSOFTCAR
              Argument: int *argp

              (»Get  software  carrier  flag«)  Ermittelt den Status des Schalters CLOCAL im Feld
              c_cflag der Struktur termios.

       TIOCSSOFTCAR
              Argument: const int *argp

              (»Set software carrier flag«) Setzt den Schalter CLOCAL in  der  Struktur  termios,
              wenn *argp von Null verschieden ist, und bereinigt ihn andernfalls.

       Falls   der   Schalter   CLOCAL   für   eine  Leitung  ausgeschaltet  ist,  dann  ist  das
       Hardware-Trägererkennung- (DCD-)Signal  bedeutend,  und  ein  open(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.

   Linux-spezifisch
       Für den TIOCLINUX-Ioctl, siehe ioctl_console(2).

   Kernel-Fehlersuche
       #include <linux/tty.h>

       TIOCTTYGSTRUCT
              Argument: struct tty_struct *argp

              Die  dd  entsprechende  tty_struct  ermitteln.  Dieser Befehl wurde in Linux 2.5.67
              entfernt.

RÜCKGABEWERT

       Der Systemaufruf ioctl(2) liefert im Erfolgsfall  0  zurück.  Bei  einem  Fehler  wird  -1
       zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.

FEHLER

       EINVAL Ungültiger Befehlsparameter.

       ENOIOCTLCMD
              Unbekannter Befehl.

       ENOTTY Ungeeigneter dd.

       EPERM  Unzureichende Berechtigung.

BEISPIELE

       Die Bedingungen von DTR auf dem seriellen Port prüfen.

       #include <stdio.h>
       #include <unistd.h>
       #include <fcntl.h>
       #include <sys/ioctl.h>

       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);
       }

SIEHE AUCH

       ldattach(1), ioctl(2), ioctl_console(2), termios(3), pty(7)

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  5.13  des  Projekts  Linux-man-pages. Eine
       Beschreibung des Projekts, Informationen, wie Fehler  gemeldet  werden  können  sowie  die
       aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die    deutsche    Übersetzung   dieser   Handbuchseite   wurde   von   Helge   Kreutzmann
       <debian@helgefjell.de> erstellt.

       Diese Übersetzung ist Freie Dokumentation;  lesen  Sie  die  GNU  General  Public  License
       Version  3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ oder neuer bezüglich der Copyright-
       Bedingungen. Es wird KEINE HAFTUNG übernommen.

       Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-
       Mail an die Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.