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

BEZEICHNUNG

       ioctl - Gerät steuern

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <sys/ioctl.h>

       int ioctl(int dd, unsigned long Akt, …);  /* Glibc, BSD */
       int ioctl(int dd, int Akt, …);            /* Musl, andere UNIX */

BESCHREIBUNG

       Der  Systemaufruf  ioctl()  manipuliert  die  zugrundeliegenden  Geräteparameter  von  Spezialdateien. Im
       Besonderen können viele Betriebscharakteristika von zeichenorientierten Spezialdateien (z. B.  Terminals)
       durch ioctl-Aktionen gesteuert werden. Das Argument dd muss ein geöffneter Dateideskriptor sein.

       Das zweite Argument ist ein geräteabhängiger Aktionscode. Das dritte Argument ist ein typloser Zeiger auf
       Speicher.  Er ist traditionell char *argp (aus einer Zeit bevor void * gültiges C war) und wird für diese
       Diskussion so genannt.

       In einem ioctl()-Akt ist kodiert, ob das Argument ein in- oder out-Parameter  ist  sowie  die  Größe  des
       Argumentes  argp  in  Byte.  Makros  und Definitionen, die in der Spezifikation eines ioctl()-Akt benutzt
       werden, befinden sich in der Datei <sys/ioctl.h>. Siehe ANMERKUNGEN.

RÜCKGABEWERT

       Üblicherweise wird im Erfolgsfall Null zurückgegeben. Ein paar ioctl()-Aktionen benutzen den Rückgabewert
       als Ausgabeparameter und geben bei Erfolg einen nichtnegativen Wert zurück.  Bei  einem  Fehler  wird  -1
       zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.

FEHLER

       EBADF  dd ist kein zulässiger Dateideskriptor.

       EFAULT argp referenziert einen Speicherbereich, auf den nicht zugegriffen werden kann.

       EINVAL Akt oder argp ist nicht gültig.

       ENOTTY dd ist nicht mit einem zeichenorientierten Spezialgerät verbunden.

       ENOTTY Die  angegebene  Aktion  passt  nicht  zur  Art  des  Objekts, auf die sich der Dateideskriptor dd
              bezieht.

VERSIONEN

       Argumente, Rückgabewerte und Semantik von ioctl(2)  variieren  je  nach  angefragtem  Gerätetreiber  (der
       Aufruf   wird   als   ein   Allheilmittel   für  alle  Operationen  benutzt,  die  nicht  sauber  in  das
       UNIX-Stream-E/A-Modell passen).

STANDARDS

       Keine.

GESCHICHTE

       Version 7 AT&T UNIX hat
           ioctl(int fildes, int Akt, struct sgttyb *argp);
       (wobei struct sgttyb historisch von stty(2) und gtty(2) verwandt wurde und vom Aktionstyp  her  polymorph
       ist (wie void * das wäre, wenn es verfügbar gewesen wäre)).

       SysIII dokumentiert arg ganz ohne Typ.

       4.3BSD hat
           ioctl(int d, unsigned long Akt, char *argp);
       (mit char *, ähnlich wie für void *).

       SysVr4 hat
           int ioctl(int fildes, int Akt,  /* arg */);

ANMERKUNGEN

       Um  diesen  Aufruf zu benutzen, wird ein offener Dateideskriptor benötigt. Der Aufruf von open(2) hat oft
       unerwünschte Nebeneffekte, die unter Linux durch Angabe des Schalters O_NONBLOCK vermieden werden können.

   Ioctl-Struktur
       Ioctl-Akt-Werte sind 32-Bit-Konstanten. Im Prinzip sind diese Konstanten vollkommen willkürlich, aber  es
       gibt Bestrebungen, etwas Struktur zu etablieren.

       In  der  alten  Linux-Situation  waren  dies  hauptsächlich 16-Bit-Konstanten, wobei das letzte Byte eine
       Seriennummer war und das/die vorhergehende(n) Byte(s) den Typ des Treibers anzeigten. Manchmal wurde  die
       Major-Nummer verwendet: 0x03 für die HDIO_*-Ioctls, 0x06 für die LP*-Ioctls. Und manchmal wurden ein oder
       mehrere  ASCII-Buchstaben  verwandt.  Beispielsweise  hat  TCGETS den Wert 0x00005401, mit 0x54 = »T« zur
       Angabe des Terminal-Treibers und CYGETTIMEOUT hat den Wert 0x00435906, mit 0x43 0x59 = »C« »Y« zur Angabe
       des »cyclades«-Treibers.

       Später (0.98p5) wurden weitere Informationen in die Nummer eingebaut. Es gibt  zwei  Richtungs-Bits  (00:
       keine,  01:  schreiben,  10:  lesen,  11: lesen/schreiben), gefolgt von 14 Größen-Bits (die die Größe des
       Arguments angeben), gefolgt von einem 8-Bit-Typ (die die Ioctls in Gruppen für  einen  gemeinsamen  Zweck
       oder gemeinsamen Treiber sammeln) und einer 8-Bit-Seriennummer.

       Die  Makros,  die  diese  Struktur  beschreiben, befinden sich in <asm/ioctl.h> und sind _IO(type,nr) und
       {_IOR,_IOW,_IOWR}(type,nr,size). Sie verwenden sizeof(size), so dass die Größe  hier  eine  Fehlbenennung
       ist: dieses dritte Argument ist ein Datentyp.

       Beachten  Sie, dass die Größen-Bits sehr unzuverlässig sind: in vielen Fällen stimmen sie nicht, entweder
       aufgrund fehlerhafter Makros, die sizeof(sizeof(struct))  verwenden  oder  aufgrund  historisch  geerbter
       Werte.

       Daher scheint es, dass die neue Struktur nur Nachteile ergab: sie hilft nicht beim Überprüfen, verursacht
       aber variierende Werte für die verschiedenen Architekturen.

SIEHE AUCH

       execve(2),   fcntl(2),   ioctl_console(2),   ioctl_fat(2),  ioctl_fs(2),  ioctl_fsmap(2),  ioctl_nsfs(2),
       ioctl_tty(2), ioctl_userfaultfd(2), ioctl_eventpoll(2), open(2), sd(4), tty(4)

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite  wurde  von  Martin  Schulze  <joey@infodrom.org>,  Michael
       Piefel  <piefel@debian.org>,  Patrick  Rother  <krd@gulu.net>,  Chris  Leick  <c.leick@vollbio.de>, Mario
       Blättermann <mario.blaettermann@gmail.com>, Dr. Tobias Quathamer <toddy@debian.org> und 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: debian-l10n-german@lists.debian.org.

Linux man-pages 6.9.1                             13. Juni 2024                                         ioctl(2)