Provided by: manpages-de-dev_4.23.1-1_all bug

BEZEICHNUNG

       ioctl_tty - Ioctls für Terminals und serielle Leitungen

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <sys/ioctl.h>
       #include <asm/termbits.h>   /* Definition von struct termios,
                                      struct termios2 und
                                      Bnnn, BOTHER, CBAUD, CLOCAL,
                                      TC*{FLUSH,ON,OFF} und anderen Konstanten */

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

BESCHREIBUNG

       Der  ioctl(2)-Aufruf  für  Terminals  und  serielle Ports akzeptiert viele mögliche Aktionsargumente. 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.

       Bitte  beachten  Sie,  dass struct termios aus <asm/termbits.h> anders und inkompatibel zu struct termios
       aus <termios.h> ist. Diese Ioctl-Aufrufe benötigen struct termios aus <asm/termbits.h>.

   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

       TIOCSERGETLSR
              Argument: int *argp

              Verbindungsstatusregister ermitteln. Statusregister hat das Bit  TIOCSER_TEMT  gesetzt,  wenn  der
              Ausgabepuffer leer ist und auch der Hardware-Sender physisch leer ist.

              Muss nicht von allen seriellen TTY-Treibern unterstützt werden.

              Wenn das Bit TIOCSER_TEMT gesetzt ist, wartet tcdrain(3) nicht und kehrt sofort zurück.

   Eingabe vortäuschen
       TIOCSTI
              Argument: const char *argp

              Das angegebene Byte in die Eingabewarteschlange einfügen.

              Seit   Linux   6.2   könnte  diese  Aktion  die  Capability  CAP_SYS_ADMIN  benötigen  (falls  die
              Sysctl-Variable dev.tty.legacy_tiocsti auf »false« gesetzt ist).

   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. Vor Linux 2.6.10 kann dies
              jeder tun, solange die Ausgabe noch nicht umgeleitet worden war; seit Linux 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

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

              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. Diese Aktion 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 Aktionsparameter.

       ENOIOCTLCMD
              Unbekannte Aktion.

       ENOTTY Ungeeigneter dd.

       EPERM  Unzureichende Berechtigung.

BEISPIELE

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

       #include <fcntl.h>
       #include <stdio.h>
       #include <sys/ioctl.h>
       #include <unistd.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);
       }

       Baud-Rate auf dem seriellen Port ermitteln oder setzen.

       /* SPDX-License-Identifier: GPL-2.0-or-later */

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

       int
       main(int argc, char *argv[])
       {
       #if !defined BOTHER
           fprintf(stderr, "BOTHER wird nicht unterstützt\n");
           /* Program kann auf TCGETS/TCSETS mit Bnnn-Konstanten zurückfallen */
           exit(EXIT_FAILURE);
       #else
           /* tio-Struktur deklarieren, ihr Typ hängt vom unterstützten Ioctl ab */
       # if defined TCGETS2
           struct termios2 tio;
       # else
           struct termios tio;
       # endif
           int fd, rc;

           if (argc != 2 && argc != 3 && argc != 4) {
               fprintf(stderr, "Aufruf: %s Gerät [Ausgabe [Eingabe] ]\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           fd = open(argv[1], O_RDWR | O_NONBLOCK | O_NOCTTY);
           if (fd < 0) {
               perror("open");
               exit(EXIT_FAILURE);
           }

           /* Die aktuellen Einstellungen des seriellen Ports mittels unterstütztem Ioctl ermitteln */
       # if defined TCGETS2
           rc = ioctl(fd, TCGETS2, &tio);
       # else
           rc = ioctl(fd, TCGETS, &tio);
       # endif
           if (rc) {
               perror("TCGETS");
               close(fd);
               exit(EXIT_FAILURE);
           }

           /* Die Baud-Rate ändern, wenn mehr Argumente bereitgestellt wurden */
           if (argc == 3 || argc == 4) {
               /* Aktuelle Baud-Rate bereinigen und einen neuen Wert einfüllen */
               tio.c_cflag &= ~CBAUD;
               tio.c_cflag |= BOTHER;
               tio.c_ospeed = atoi(argv[2]);

               /* Die aktuelle Eingabe-Baud-Rate bereinigen und einen neuen Wert einfüllen */
               tio.c_cflag &= ~(CBAUD << IBSHIFT);
               tio.c_cflag |= BOTHER << IBSHIFT;
               /* Falls das 4. Argument nicht bereitgestellt wurde, Ausgabe-Baud-Rate nochmals verwenden */
               tio.c_ispeed = (argc == 4) ? atoi(argv[3]) : atoi(argv[2]);

               /* Neue Einstellungen des seriellen Ports mittels unterstütztem Ioctl setzen */
       # if defined TCSETS2
               rc = ioctl(fd, TCSETS2, &tio);
       # else
               rc = ioctl(fd, TCSETS, &tio);
       # endif
               if (rc) {
                   perror("TCSETS");
                   close(fd);
                   exit(EXIT_FAILURE);
               }

               /* Und die neuen Werte erhalten, die wirklich konfiguriert wurden */
       # if defined TCGETS2
               rc = ioctl(fd, TCGETS2, &tio);
       # else
               rc = ioctl(fd, TCGETS, &tio);
       # endif
               if (rc) {
                   perror("TCGETS");
                   close(fd);
                   exit(EXIT_FAILURE);
               }
           }

           close(fd);

           printf("Ausgabe-Baud-Rate: %u\n", tio.c_ospeed);
           printf("Eingabe-Baud-Rate: %u\n", tio.c_ispeed);

           exit(EXIT_SUCCESS);
       #endif
       }

SIEHE AUCH

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

Ü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 man-pages 6.8                                2. Mai 2024                                      ioctl_tty(2)