Provided by: manpages-de-dev_4.13-4_all bug

BEZEICHNUNG

       ioctl_tty - Ioctls für Terminals und serielle Leitungen

ÜBERSICHT

       #include <termios.h>

       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    struct termios *argp
              äquivalent zu tcgetattr(dd, argp)

              Einstellungen der aktuellen seriellen Schnittstelle ermitteln

       TCSETS    const struct termios *argp
              äquivalent zu tcsetattr(dd, TCSANOW, argp)

              Einstellungen der aktuellen seriellen Schnittstelle setzen

       TCSETSW   const struct termios *argp
              äquivalent zu tcsetattr(dd, TCSADRAIN, argp)

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

       TCSETSF   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  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 struct termios *argp
              Ermittelt den Status der Sperren der Struktur termios des Terminals.

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

       Die folgenden Konstanten und Strukturen sind in <sys/ioctl.h> definiert.

       TIOCGWINSZ     struct winsize *argp
              Fenstergröße ermitteln.

       TIOCSWINSZ     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    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   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  void
              Schaltet Unterbrechungen ein, d.h. beginnt das Senden von Null-Bits.

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

   Software-Flusssteuerung
       TCXONC    int arg
              äquivalent zu tcflow(dd, arg)

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

   Pufferzählung und -leerung
       FIONREAD  int *argp
              Die Anzahl der Bytes im Eingabepuffer ermitteln.

       TIOCINQ   int *argp
              identisch zu FIONREAD

       TIOCOUTQ  int *argp
              Die Anzahl der Bytes im Ausgabepuffer ermitteln.

       TCFLSH    int arg
              äquivalent zu tcflush(dd, arg)

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

   Eingabe vortäuschen
       TIOCSTI   const char *argp
              Das angegebene Byte in die Eingabewarteschlange einfügen.

   Konsolenausgabe umleiten
       TIOCCONS  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 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 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 pid_t *argp
              wenn erfolgreich, äquivalent zu *argp = tcgetpgrp(dd)

              Die Prozessgruppenkennung der Vordergrundprozessgruppe auf diesem Terminal ermitteln.

       TIOCSPGRP const pid_t *argp
              äquivalent zu tcsetpgrp(dd, *argp)

              Die Vordergrundprozessgruppenkennung dieses Terminals setzen.

       TIOCGSID  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  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 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  void
              exklusiven Modus deaktivieren

   Verbindungsmodus
       TIOCGETD  int *argp
              Ermittelt den Verbindungsmodus des Terminals.

       TIOCSETD  const int *argp
              Setzt den Verbindungsmodus des Terminals.

   Pseudoterminal-Ioctls
       TIOCPKT   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  const int *argp
              (Seit  Linux  3.8) Liefert die aktuelle Paketmoduseinstellung in der Ganzzahl, auf die argp zeigt,
              zurück.

       TIOCSPTLCK     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     int *argp
              (Seit  Linux 3.8) Legt den aktuellen Sperrstatus des Pseudoterminal-Slave-Geräts in den durch argp
              verwiesenen Ort.

       TIOCGPTPEER    int flags
              (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  int *argp
              Den Status der Modem-Bits ermitteln.

       TIOCMSET  const int *argp
              Den Status der Modem-Bits setzen.

       TIOCMBIC  const int *argp
              Die angegebenen Modem-Bits zurücksetzen.

       TIOCMBIS  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     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    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   int *argp
              (»Get  software  carrier  flag«)  Ermittelt  den  Status  des Schalters CLOCAL im Feld c_cflag der
              Struktur termios.

       TIOCSSOFTCAR   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 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 entsprechend gesetzt.

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 <termios.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.10  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 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.

Linux                                             9. Juni 2020                                      IOCTL_TTY(2)