Manpages

BEZEICHNUNG

ioctl_list − Liste der ioctl−Aufrufe im Linux/i386−Kernel

BESCHREIBUNG

Dies ist die Ioctl−Liste 1.3.27, eine Liste von Ioctl−Aufrufen im Linux/i386−Kernel 1.3.27. Sie enthält 421 Ioctls aus </usr/include/{asm,linux}/*.h>. Für jeden Ioctl wird der numerische Wert, der Name und der Argumenttyp aufgelistet.

Ein Argumenttyp const struct foo * bedeutet, dass das Argument Eingabe für den Kernel ist. struct foo * bedeutet, der Kernel gibt das Argument aus. Falls der Kernel das Argument für Ein− und Ausgabe benutzt, wird dies durch // E/A markiert.

Einige Ioctls benötigen mehr Argumente oder geben mehr Werte zurück als eine einzige Struktur. Diese werden durch // WEITERE markiert und weiter in einem separaten Abschnitt dokumentiert.

Diese Liste ist sehr unvollständig.

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

Die alte Linux−Situation war, dass 16−Bit−Konstanten vorherrschten, wobei das letzte Byte eine Seriennummer ist und das/die vorhergehende(n) Byte(s) den Typ des Treibers anzeigt. 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 verwendet. 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) wurde etwas mehr Information in die Zahlen eingebaut. Es gibt zwei Richtungs−Bits (00:keine, 01: schreiben, 10: lesen, 11: lesen/schreiben) gefolgt von 14 Größen−Bits (übergeben die Größe als Argument) gefolgt von einem 8−Bit−Typ (gruppiert die Ioctls für einen gemeinsamen Zweck oder einen gemeinsamen Treiber) sowie eine 8−Bit−Seriennummer.

Die Makros, die diese Struktur beschreiben, stammen aus <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 Fehlbezeichnung ist: das 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 vererbter (legacy) Werte.

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

RÜCKGABEWERT

»Anständige« Ioctls geben bei Erfolg 0 zurück und −1 bei einem Fehler, während jede ausgegebene Wert mittels des Arguments gespeichert wird. Allerdings geben etliche Ioctls in der Tat einen Ausgabewert zurück. Dies ist im Folgenden noch nicht angegeben.

// Haupttabelle

// <include/asm−i386/socket.h>

// <include/asm−i386/termios.h>

// <include/linux/ax25.h>

// <include/linux/cdk.h>

// <include/linux/cdrom.h>

// <include/linux/cm206.h>

// <include/linux/cyclades.h>

// <include/linux/fd.h>

// <include/linux/fs.h>

// <include/linux/hdreg.h>

// <include/linux/if_eql.h>

// <include/linux/if_plip.h>

// <include/linux/if_ppp.h>

// <include/linux/ipx.h>

// <include/linux/kd.h>

// <include/linux/lp.h>

// <include/linux/mroute.h>

// <include/linux/msdos_fs.h> siehe ioctl_fat(2)

// <include/linux/mtio.h>

// <include/linux/netrom.h>

// <include/uapi/linux/wireless.h>
// Dieses API ist missbilligt.
// Es wird durch nl80211 und cfg80211 ersetzt. Siehe
// https://wireless.wiki.kernel.org/en/developers/documentation/nl80211

// <include/linux/sbpcd.h>

// <include/linux/scc.h>

// <include/linux/scsi.h>

// <include/linux/smb_fs.h>

// <include/uapi/linux/sockios.h> siehe netdevice(7)

// <include/linux/soundcard.h>

// <include/linux/timerfd.h> siehe timerfd_create(2)

// <include/linux/umsdos_fs.h>

// <include/linux/vt.h>

// Weitere Argumente. Einige Ioctls benötigen einen Zeiger auf eine Struktur, die zusätzliche Zeiger enthält. Diese sind hier in alphabetischer Reihenfolge dokumentiert.

CDROMREADAUDIO benötigt einen Eingabezeiger const struct cdrom_read_audio *. Das Feld buf zeigt auf einen Ausgabepuffer der Länge nframes * CD_FRAMESIZE_RAW.

CDROMREADCOOKED, CDROMREADMODE1, CDROMREADMODE2 und CDROMREADRAW benötigen einen Eingabezeiger const struct cdrom_msf *. Sie benutzen denselben Zeiger als Ausgabezeiger auf char []. Die Länge ändert sich durch die Anforderung. Bei CDROMREADMODE1 benutzen die meisten Treiber CD_FRAMESIZE, jedoch benutzt der Optics−Storage−Treiber stattdessen OPT_BLOCKSIZE (beide haben den numerischen Wert 2048).

CDROMREADCOOKED char [CD_FRAMESIZE]
CDROMREADMODE1 char [CD_FRAMESIZE oder OPT_BLOCKSIZE]
CDROMREADMODE2 char [CD_FRAMESIZE_RAW0]
CDROMREADRAW char [CD_FRAMESIZE_RAW]

EQL_ENSLAVE, EQL_EMANCIPATE, EQL_GETSLAVECFG, EQL_SETSLAVECFG, EQL_GETMASTERCFG und EQL_SETMASTERCFG benötigen ein struct ifreq *. Das Feld ifr_data ist ein Zeiger auf eine weitere Struktur wie folgt:

EQL_ENSLAVE const struct slaving_request *
EQL_EMANCIPATE const struct slaving_request *
EQL_GETSLAVECFG struct slave_config * // E/A
EQL_SETSLAVECFG const struct slave_config *
EQL_GETMASTERCFG struct master_config *
EQL_SETMASTERCFG const struct master_config *

FDRAWCMD benötigt ein struct floppy raw_cmd *. Falls flags & FD_RAW_WRITE nicht Null ist, dann zeigt data auf einen Eingabepuffer der Länge length. Falls flags & FD_RAW_READ nicht Null ist, dann zeigt data auf einen Ausgabepuffer der Länge length.

GIO_FONTX und PIO_FONTX benötigen ein struct console_font_desc * beziehungsweise ein const struct console_font_desc *. chardata zeigt auf einen Puffer von char [charcount]. Dies ist ein Ausgabepuffer für GIO_FONTX und ein Eingabepuffer für PIO_FONTX.

GIO_UNIMAP und PIO_UNIMAP benötigen eine struct unimapdesc * beziehungsweise ein const struct unimapdesc *. entries zeigt auf einen Puffer von struct unipair [entry_ct]. Dies ist ein Ausgabepuffer für GIO_UNIMAP und ein Eingabepuffer für PIO_UNIMAP.

KDADDIO, KDDELIO, KDDISABIO und KDENABIO geben den Zugriff auf E/A−Ports frei oder sperren ihn. Sie sind grundlegende Alternativen zu »ioperm«.

KDMAPDISP und KDUNMAPDISP aktivieren oder deaktivieren Memory−Mappings oder den Zugriff auf E/A−Ports. Sie sind nicht im Kernel implementiert.

SCSI_IOCTL_PROBE_HOST benötigt einen Eingabezeiger const int *, der eine Länge ist. Er benutzt denselben Zeiger als Ausgabezeiger auf einen char []−Puffer dieser Länge.

SIOCADDRT und SIOCDELRT benötigen einen Eingabezeiger, dessen Typ vom Protokoll abhängt:

Die meisten Protokolle const struct rtentry *
AX.25 const struct ax25_route *
NET/ROM const struct nr_route_struct *
INET6 const struct in6_rtmsg *

SIOCGIFCONF benötigt ein struct ifconf *. Das Feld ifc_buf zeigt auf einen Puffer der Länge ifc_len Byte, wohinein der Kernel eine Liste des Typs struct ifreq [] schreibt.

SIOCSIFHWADDR benötigt einen Eingabezeiger, dessen Typ vom Protokoll abhängt:

Die meisten Protokolle const struct ifreq *
AX.25 const char [AX25_ADDR_LEN]

TIOCLINUX benötigt ein const char *. Es benutzt dies, um zwischen diversen Unterfällen zu unterscheiden. In der Tabelle unten bedeutet N + foo so viel wie foo nach einem N−byte−Block. struct selection ist definiert in drivers/char/selection.c.

TIOCLINUX−2 1 + const struct selection *
TIOCLINUX−3 void
TIOCLINUX−4 void
TIOCLINUX−5 4 + const struct { long [8]; } *
TIOCLINUX−6 char *
TIOCLINUX−7 char *
TIOCLINUX−10 1 + const char *

// Doppelte Ioctls

Diese Liste enthält keine Ioctls der Bereiche SIOCDEVPRIVATE und SIOCPROTOPRIVATE.

SIEHE AUCH

ioctl(2), ioctl_fat(2), netdevice(7)

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 4.12 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 Patrick Rother <krd [AT] gulu.net>, Helge Kreutzmann <debian [AT] helgefjell.de>, Martin Eberhard Schauer <Martin.E.Schauer [AT] gmx.de> und Mario Blättermann <mario.blaettermann [AT] gmail.com> 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 <debian-l10n-german [AT] lists.org>.

COMMENTS