bionic (2) ioctl_tty.2.gz

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