Provided by: manpages-de-dev_2.16-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 -sitzungskennung
       TIOCGPGRP pid_t *argp
              wenn erfolgreich, äquivalent zu *argp = tcgetpgrp(fd)
              Die  Prozessgruppenkennung  der  Vordergrundprozessgruppe   auf   diesem   Terminal
              ermitteln.

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

       TIOCGSID  pid_t *argp
              Ermittelt  die  Sitzungskennung  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 (Datensatz bereit/Leitung aktiviert)
       TIOCM_DTR       DTR (Datenterminal bereit)
       TIOCM_RTS       RTS (Anfrage zum Senden)
       TIOCM_ST        Sekundärer TXD (Senden)
       TIOCM_SR        Sekundärer RXD (Empfangen)
       TIOCM_CTS       CTS (bereit zum Senden)
       TIOCM_CAR       DCD (Datenträgersignal erkannt)
       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  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  5.03  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>.