Provided by: manpages-de-dev_4.13-4_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 entsprechend gesetzt.

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