iopl(2) I/O-Privilegienstufe ändern

ÜBERSICHT

#include <sys/io.h>

int iopl(int level);

BESCHREIBUNG

iopl() ändert die E/A-Privilegienstufe des aufrufenden Prozesses wie durch die zwei niedrigstwertigen Bits in level angegeben.

Dieser Aufruf ist notwendig, um 8514-kompatible X-Server unter Linux auszuführen. Da diese X-Server Zugriff auf alle 65536 I/O-Ports benötigen, ist der Aufruf ioperm(2) nicht ausreichend.

Zusätzlich zu uneingeschränktem Zugriff auf I/O-Ports erlaubt das Laufen in einer höheren I/O-Privilegienstufe dem Prozess auch, Interupts auszuschalten. Dies wird wahrscheinlich das System zusammenbrechen lassen und wird nicht empfohlen.

Zugriffsrechte werden nicht vom dem durch fork(2) erstellten Kindprozess ererbt und werden nicht über execve(2) erhalten (siehe aber auch HINWEISE).

Die I/O-Privilegienstufe eines normalen Prozesses ist 0.

Der Aufruf ist hauptsächlich für die i386-Architektur. Auf vielen anderen Architekturen existiert er nicht und wird immer einen Fehler zurückliefern.

RÜCKGABEWERT

Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno entsprechend gesetzt.

FEHLER

EINVAL
level ist größer als 3.
ENOSYS
Dieser Aufruf ist nicht implementiert.
EPERM
Der aufrufende Prozess hat unzureichende Privilegien, um iopl() aufzurufen; die Capability CAP_SYS_RAWIO wird benötigt, um die E/A-Privilegienstufe über deren aktuellen Wert zu erhöhen.

KONFORM ZU

iopl() ist Linux-spezifisch und sollte nicht in Programmen verwandt werden, die portabel sein sollen.

ANMERKUNGEN

Glibc2 hat einen Prototyp sowohl in <sys/io.h> als auch in <sys/perm.h>. Vermeiden Sie letzteren, er ist nur auf i386 verfügbar.

Vor Linux 3.7 wurden die Rechte von mit fork(2) erstellten Kindern geerbt und wurden über execve(2) erhateln. Dieses Verhalten wurde versehentlich in Linux 3.7 geändert und wird nicht mehr wiederhergestellt.

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 4.06 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 <[email protected]>, Helge Kreutzmann <[email protected]> und Mario Blättermann <[email protected]> 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 <[email protected]>.