Provided by: manpages-de-dev_2.5-1_all bug

BEZEICHNUNG

       ioctl_tty - Ioctls für Terminals und serielle Leitungen

ÜBERSICHT

       #include <termios.h>

       int ioctl(int fd, int cmd, …);

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(fd, argp)
              Einstellungen der aktuellen seriellen Schnittstelle ermitteln

       TCSETS    const struct termios *argp
              äquivalent zu tcsetattr(fd, TCSANOW, argp)
              Einstellungen der aktuellen seriellen Schnittstelle setzen

       TCSETSW   const struct termios *argp
              äquivalent zu tcsetattr(fd, TCSADRAIN, argp)
              Erlaubt dem Ausgabepuffer, leerzulaufen,  und  setzt  die  aktuellen  Einstellungen
              serieller Ports.

       TCSETSF   const struct termios *argp
              äquivalent zu tcsetattr(fd, 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(fd, 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 kommt ohne Aktion zurück. Falls arg
              nicht Null ist, ist die Aktion undefiniert.

              (SVr4,  UnixWare,  Solaris,  Linux  behandeln  tcsendbreak(fd,arg)  mit  von   Null
              verschiedenem  arg  wie  tcdrain(fd).  SunOS  behandelt  arg  als Multiplikator und
              schickt einen Bitstrom der Länge arg-mal so lange wie bei arg  gleich  Null.  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
              Unterbrechungen nicht unterstützt.

       TIOCSBRK  void
              Schaltet Unterbrechungen ein, d.h. beginnt den Versand von Null-Bits.

       TIOCCBRK  void
              Schaltet Unterbrechungen aus, d.h. beendet den Versand von Null-Bits.

   Software-Flußsteuerung
       TCXONC    int arg
              äquivalent zu tcflow(fd, 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(fd, arg)
              siehe tcflush(3) für die Argumentwerte TCIFLUSH, TCOFLUSH und TCIOFLUSH

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

   Konsoleausgabe umleiten
       TIOCCONS  void
              Lenkt die Ausgabe, die  an  /dev/console  oder  /dev/tty0  gegangen  wäre,  an  das
              übergebene  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 fd, der auf /dev/console oder /dev/tty0 zeigt, verwandt wird.

   Steuerndes Terminal
       TIOCSCTTY int arg
              Macht das übergebene 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 festgelegt 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 das
              Capability CAP_SYS_ADMIN und ist arg 1, dann wird das Terminal  gestolen  und  alle
              Prozesse, die es als steuerndes Terminal hatten, verlieren es.

       TIOCNOTTY void
              Falls das übergebene 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 -sitzungs-ID
       TIOCGPGRP pid_t *argp
              wenn erfolgreich, äquivalent zu *argp = tcgetpgrp(fd)
              Die Prozessgruppen-ID der Vordergrundprozessgruppe auf diesem Terminal ermitteln.

       TIOCSPGRP const pid_t *argp
              äquivalent zu tcsetpgrp(fd, *argp)
              Die Vordergrundprozessgruppen-ID dieses Terminals setzen.

       TIOCGSID  pid_t *argp
              Ermittelt die Sitzungs-ID des übergebenen 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

   Leitungsdisziplin
       TIOCGETD  int *argp
              Ermittelt die Leitungsdisziplin des Terminals.

       TIOCSETD  const int *argp
              Setzt die Leitungsdisziplin des Terminals.

   Pseudoterminal-Ioctls
       TIOCPKT   const int *argp
              Aktiviert (wenn *argp von Null verschieden ist)  oder  deaktivert  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  (» «),  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 einer oder mehrere der folgenden
              Bits:

              TIOCPKT_FLUSHREAD   Die Lesewarteschlange für das Terminal ist geleert.
              TIOCPKT_FLUSHWRITE  Die Schreibwarteschlange für das Terminal ist geleert.
              TIOCPKT_STOP        Ausgabe in das Terminal ist gestoppt.
              TIOCPKT_START       Ausgabe in 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    dieser    Modus    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-Flußsteuerung 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)
              das 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
              (since Linux 4.13)  Given a file descriptor in fd that refers to  a  pseudoterminal
              master, open (with the given open(2)-style flags)  and return a new file descriptor
              that refers to  the  peer  pseudoterminal  slave  device.  This  operation  can  be
              performed  regardless  of  whether  the  pathname of the slave device is accessible
              through the calling process's mount namespace.

              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,  TIOCREMOTE  wurden  unter  Linux nicht
       implementiert.

   Modem-Steuerung
       TIOCMGET  int *argp
              Den Staus der Modem-Bits ermitteln.

       TIOCMSET  const int *argp
              Den Staus 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 (data set ready/line enable)
       TIOCM_DTR       DTR (data terminal ready)
       TIOCM_RTS       RTS (request to send)
       TIOCM_ST        Secondary TXD (transmit)
       TIOCM_SR        Secondary RXD (receive)
       TIOCM_CTS       CTS (clear to send)
       TIOCM_CAR       DCD (data carrier detect)
       TIOCM_CD         see TIOCM_CAR
       TIOCM_RNG       RNG (ring)
       TIOCM_RI         see TIOCM_RNG
       TIOCM_DSR       DSR (data set ready)

       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  festgelegt,  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 Interrrupts 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.

       If  the  CLOCAL  flag  for  a  line  is  off,  the hardware carrier detect (DCD) signal is
       significant, and an open(2)  of  the  corresponding  terminal  will  block  until  DCD  is
       asserted,  unless  the  O_NONBLOCK flag is given. If CLOCAL is set, the line behaves as if
       DCD is always asserted. The software carrier flag is usually turned on for local  devices,
       and is off for lines with modems.

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

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

       TIOCTTYGSTRUCT struct tty_struct *argp
              Die  fd  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 fd

       EPERM  Unzureichende Berechtigung.

BEISPIEL

       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  4.15  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 <debian-l10n-german@lists.debian.org>.