iopl(2)

NAZWA
iopl - zmienia poziom uprawnień wejścia/wyjścia

BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)

SKŁADNIA
#include <sys/io.h>

[[przestarzałe]] int iopl(int level);

OPIS
iopl() zmienia poziom uprawnień wejścia/wyjścia wątku wywołującego na podstawie dwóch najmniej znaczących bitów parametru level.

Poziom uprawnień wejścia/wyjścia dla normalnego wątku wynosi 0. Uprawnienia są dziedziczone z rodzica na potomka.

To wywołanie jest przestarzałe, jest znacznie wolniejsze od ioperm(2) i jest zapewniane tylko dla starszych serwerów X, które wymagają dostępu do wszystkich 65 536 portów wejścia/wyjścia. Jest przeznaczone głównie do architektury i386. Na wielu innych architekturach nie istnieje lub zawsze zwraca błąd.

WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest -1 i ustawiane errno, wskazując błąd.

BŁĘDY

EINVAL
    level jest większy niż 3.

ENOSYS
    To wywołanie jest niezaimplementowane.

EPERM
    Wywołujący wątek jest niewystarczająco uprzywilejowany do wywołania iopl(); do podniesienia poziomu uprawnień wejścia/wyjścia ponad ich aktualny poziom potrzebny jest przywilej CAP_SYS_RAWIO (ang. capability).

WERSJE
glibc2 posiada prototyp zarówno w <sys/io.h>, jak i w <sys/perm.h>. Należy unikać tego ostatniego, gdyż jest dostępne tylko na i386.

STANDARDY
Linux.

HISTORIA
Przed Linuksem 5.5 iopl() umożliwiało również wątkowi zablokowanie przerwań, przy pracy na wyższych poziomach uprawnień wejścia/wyjścia. Prawdopodobnie spowodowałoby to załamanie systemu i nie jest to zalecane.

Przed Linuksem 3.7, na niektórych architekturach (np. i386), uprawnienia były dziedziczone przez potomka utworzonego za pomocą fork(2) i były zachowywane przez execve(2). To zachowanie zmieniło się niepostrzeżenie w Linuksie 3.7 i nie zostanie przywrócone.

ZOBACZ TAKŻE
ioperm(2), outb(2), capabilities(7)

TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <pborys@dione.ids.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.