Provided by: manpages-de-dev_4.15.0-9_all bug

BEZEICHNUNG

       ioctl - Gerät steuern

ÜBERSICHT

       #include <sys/ioctl.h>

       int ioctl(int dd, unsigned long Aufruf, …);

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-Aufrufe gesteuert werden. Das Argument dd
       muss ein geöffneter Dateideskriptor sein.

       Das zweite Argument ist ein geräteabhängiger  Aufrufkode.  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()-Aufruf 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()-Aufrufs benutzt werden, befinden sich  in  der  Datei  <sys/ioctl.h>.  Siehe
       ANMERKUNGEN.

RÜCKGABEWERT

       Üblicherweise  wird  im  Erfolgsfall Null zurückgegeben. Ein paar ioctl()-Aufrufe benutzen
       den Rückgabewert als Ausgabeparameter und geben bei  Erfolg  einen  nicht  negativen  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 Aufruf oder argp ist nicht gültig.

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

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

KONFORM ZU

       Kein  einzelner  Standard. 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).

       Der Systemaufruf ioctl erschien in Version 7 von AT&T UNIX.

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-Befehle   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_ficlonerange(2),
       ioctl_fideduperange(2), ioctl_fslabel(2), ioctl_getfsmap(2), ioctl_iflags(2), ioctl_ns(2),
       ioctl_tty(2), ioctl_userfaultfd(2), open(2), sd(4), tty(4)

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  5.13  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   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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.