Provided by: manpages-de-dev_4.21.0-2_all bug

BEZEICHNUNG

       ioctl - Gerät steuern

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

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

STANDARDS

       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_ficlone(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)

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