Jeśli jakaś funkcja zakończy się błędem, w RAX zwracana jest wartość ujemna z przedziału od -4096 do -1 włącznie.
Z drugiej strony, opisy funkcji na stronach manuala mówią, że zwracane jest -1, a wartość błędu jest zapisywana do zmiennej errno z biblioteki GLIBC. Dzieje się tak tylko w przypadku, gdy korzystamy z interfejsu języka C (czyli deklarujemy i uruchamiamy zewnętrzne funkcje odpowiadające wywołaniom systemowym i linkujemy nasz program z biblioteką języka C), a nie bezpośrednio z wywołań systemowych (czyli syscall).
Najbardziej aktualne informacje o funkcjach systemowych można znaleźć zazwyczaj
w sekcji 2 (lub 3) manuala, na przykład man 2 open
.
Najnowsze wersje jądra można znaleźć na www.kernel.org, a pliki z listą funkcji i ich numerów są pod ścieżkami:
Najnowsze wersje stron manuala można znaleźć tu: www.kernel.org/pub/linux/docs/man-pages.
Napis ASCIIZ oznacza łańcuch znaków ASCII zakończony znakiem/bajtem Zerowym.
Jeśli potrzeba, przy każdej funkcji jest odnośnik do opisu argumentów i innych dodatkowych informacji: typów danych, wartości błędów, możliwych wartości parametrów itp.
Numer/ RAX | Opis | Argumenty | Zwraca |
---|---|---|---|
201 |
Pobierz czas (sys_time) |
RDI = NULL lub adres bufora, który otrzyma kopię wyniku |
RAX = liczba sekund od 1 Stycznia 1970 minus 1 RAX = błąd EFAULT |
202 |
Szybka funkcja blokowania (sys_futex) |
RDI = sprawdzany adres RSI = operacja RDX = wartość R10 = adres struktury timespec (czas oczekiwania) lub 0 |
RAX zależy od operacji RAX = błąd EINVAL, EFAULT |
203 |
Ustaw maskę procesorów dla procesu (sys_sched_setaffinity) |
RDI = PID procesu, którego maskę ustawiamy (0=bieżący) RSI = długość maski pod [RDX] RDX = adres maski bitowej. Najmłodszy bit maski oznacza, czy proces może być wykonany na pierwszym procesorze logicznym i tak dalej |
RAX = 0 RAX = błąd EINVAL, EFAULT, ESRCH, EPERM |
204 |
Pobierz maskę procesorów dla procesu (sys_sched_getaffinity) |
RDI = PID procesu, którego maskę pobieramy (0=bieżący) RSI = długość maski pod [RDX] RDX = adres maski bitowej. Najmłodszy bit maski oznacza, czy proces może być wykonany na pierwszym procesorze logicznym i tak dalej |
RAX = 0 RAX = błąd EINVAL, EFAULT, ESRCH, EPERM |
205 |
Ustaw wpis w obszarze lokalnym wątku TLS (sys_set_thread_area) |
RDI = adres struktury user_desc |
RAX = 0 RAX = EINVAL, EFAULT, ESRCH |
206 |
Utwórz asynchroniczny kontekst we/wy (sys_io_setup) |
RDI = liczba zdarzeń, które kontekst może otrzymać RSI = adres DWORDa (o wartości zero), który otrzyma uchwyt do nowego kontekstu |
RAX = 0 RAX = błąd EINVAL, EFAULT, ENOSYS, ENOMEM, EAGAIN |
207 |
Zniszcz asynchroniczny kontekst we/wy (sys_io_destroy) |
RDI = uchwyt do usuwanego kontekstu |
RAX = 0 RAX = błąd EINVAL, EFAULT, ENOSYS |
208 |
Pobierz zdarzenia we/wy (sys_io_getevents) |
RDI = uchwyt do kontekstu RSI = minimalna liczba zdarzeń do pobrania RDX = maksymalna liczba zdarzeń do pobrania R10 = adres tablicy struktur io_event R8 = adres struktury timespec (czas oczekiwania) lub 0 |
RAX = liczba odczytanych zdarzeń RAX = błąd EINVAL, EFAULT, ENOSYS |
209 |
Wyślij zdarzenia we/wy do przetworzenia (sys_io_submit) |
RDI = uchwyt do kontekstu RSI = liczba adresów struktur pod [RDX] RDX = adres tablicy adresów struktur iocb opisujących zdarzenia do przetworzenia |
RAX = liczba wysłanych bloków we/wy RAX = błąd EINVAL, EFAULT, ENOSYS, EBADF, EAGAIN |
210 |
Przerwij operację we/wy (sys_io_cancel) |
RDI = uchwyt do kontekstu RSI = adres struktury iocb, opisującej operację do przerwania RDX = adres struktury io_event, która otrzyma przerwane działanie |
RAX = 0 RAX = błąd EINVAL, EFAULT, ENOSYS, EBADF, EAGAIN |
211 |
Pobierz wpis w obszarze lokalnym wątku TLS (sys_get_thread_area) |
RDI = adres struktury user_desc |
RAX = 0 RAX = błąd EINVAL, EFAULT |
212 |
Pobierz ścieżkę wejścia do katalogu (sys_lookup_dcookie) |
RDI? = wartość opisująca wpis o katalogu RSI? = adres bufora, który otrzyma ścieżkę RDX? = długość tego bufora |
RAX = długość ścieżki RAX = błąd ENAMETOOLONG, EPERM, EINVAL, ENOMEM, ERANGE, EFAULT |
213 |
Utwórz deskryptor pliku epoll (sys_epoll_create) |
RDI = liczba deskryptorów do zarezerwowania |
RAX = nowy deskryptor pliku RAX = błąd ENOMEM, EINVAL, EMFILE, ENFILE |
214 |
sys_epoll_ctl_old |
niezaimplementowane |
zawsze RAX = ENOSYS |
215 |
sys_epoll_wait_old |
niezaimplementowane |
zawsze RAX = ENOSYS |
216 |
Przemapuj strony pamięci / stwórz nieliniowe mapowanie pliku (sys_remap_file_pages) |
RDI = początkowy adres stron pamięci RSI = rozmiar przemapowywanego obszaru pamięci RDX = 0 (już nieużywane, musi być 0) R10 = offset w pliku mierzony w jednostkach strony systemowej R8 = flagi (znaczenie takie, jak w sys_mmap, ale tu tylko MAP_NONBLOCK jest uznawane) |
RAX = 0 RAX = błąd EINVAL |
217 |
Pobierz wpisy o katalogach, wersja 64-bitowa (sys_getdents64) |
RDI = deskryptor otwartego katalogu RSI = adres obszaru pamięci na struktury dirent RDX = rozmiar obszaru pamięci pod [RSI] |
RAX = 0 RAX = błąd EBADF, EFAULT, EINVAL, ENOENT, ENOTDIR |
218 |
Utwórz wskaźnik do ID wątku (sys_set_tid_address) |
RDI = wskaźnik (adres), na którego wartość ma być ustawiona zmienna
clear_child_tid jądra |
RAX = PID bieżącego procesu |
219 |
Wywołaj ponownie (sys_restart_syscall) |
brak |
to, co zwróci ponowione wywołanie systemowe |
220 |
Operacja na semaforze z czasem (sys_semtimedop) |
RDI = identyfikator zestawu semaforów RSI = adres tablicy struktur sembuf RDX = liczba elementów w tablicy spod RSI R10 = adres struktury timespec, zawierającej maksymalny czas oczekiwania |
RAX = 0 RAX = błąd E2BIG, EACCES, EAGAIN, EFAULT, EFBIG, EIDRM, EINTR, EINVAL, ENOMEM, ERANGE |
221 |
Zadeklaruj wzorce dostępu (sys_fadvise64_64) |
RDI = deskryptor pliku RSI = początek obszaru w pliku (offset) RDX = długość obszaru pliku R10 = wzorzec dostępu |
RAX = 0 RAX = błąd EBADF, ESPIPE, EINVAL |
222 |
Utwórz POSIX-owy licznik czasu (sys_timer_create) |
RDI = ID zegara, który będzie podstawą mierzenia czasu RSI = 0 lub adres struktury sigevent RDX = adres zmiennej trzymającej adres DWORDa, który otrzyma ID nowego zegara |
RAX = 0 RAX = błąd EAGAIN, EINVAL, ENOTSUPP |
223 |
Nastaw POSIX-owy licznik czasu (sys_timer_settime) |
RDI = ID zegara RSI = flagi (patrz: manual) RDX = adres struktury itimerspec R10 = adres struktury itimerspec |
RAX = 0 RAX = błąd EINVAL |
224 |
Pobierz pozostały czas na POSIX-owym liczniku czasu (sys_timer_gettime) |
RDI = ID zegara RSI = adres struktury itimerspec, która otrzyma wynik |
RAX = 0 RAX = błąd EINVAL |
225 |
Pobierz liczbę przekroczeń POSIX-owego licznika czasu (sys_timer_getoverrun) |
RDI = ID zegara |
RAX = liczba przekroczeń RAX = błąd EINVAL |
226 |
Usuń POSIX-owy licznik czasu (sys_timer_delete) |
RDI = ID zegara |
RAX = 0 RAX = błąd EINVAL |
227 |
Ustaw czas na danym zegarze (sys_clock_settime) |
RDI = ID zegara RSI = adres struktury timespec zawierającej czas do ustawienia |
RAX = 0 RAX = błąd EINVAL, EFAULT, EINVAL |
228 |
Pobierz czas na danym zegarze (sys_clock_gettime) |
RDI = ID zegara RSI = adres struktury timespec, która otrzyma czas |
RAX = 0 RAX = błąd EINVAL, EFAULT, EINVAL |
229 |
Pobierz precyzję danego zegara (sys_clock_getres) |
RDI = ID zegara RSI = adres struktury timespec |
RAX = 0 RAX = błąd EINVAL, EFAULT, EINVAL |
230 |
Przerwa w oparciu o dany zegar (sys_clock_nanosleep) |
RDI = ID zegara RSI = flagi (TIMER_ABSTIME=1) kontrolujące rodzaj czasu oczekiwania (względny lub nie) RDX = adres struktury timespec, która zawiera czas czekania R10 = adres struktury timespec (lub NULL), która otrzyma pozostały czas |
RAX = 0 RAX = błąd EINTR, EFAULT, ENOTSUPP |
231 |
Zakończ wszystkie wątki procesu (sys_exit_group) |
RDI = status (kod wyjścia) |
nigdy nie powraca |
232 |
Czekaj na deskryptorze pliku epoll (sys_epoll_wait) |
RDI = deskryptor epoll RSI = adres tablicy struktur epoll_event RDX = maksymalna liczba zdarzeń, na które będziemy czekać R10 = czas czekania w milisekundach (-1 = nieskończoność) |
RAX = liczba deskryptorów gotowych RAX = błąd EFAULT, EINTR, EBADF, EINVAL |
233 |
Kontroluj deskryptor pliku epoll (sys_epoll_ctl) |
RDI = deskryptor epoll RSI = kod operacji RDX = deskryptor pliku R10 = adres struktury epoll_event |
RAX = 0 RAX = błąd ENOMEM, EBADF, EPERM, EINVAL |
234 |
Wyślij sygnał do pojedynczego procesu (sys_tgkill) |
RDI = identyfikator grupy wątków (niekoniecznie całego procesu) RSI = identyfikator wątku, który ma otrzymać sygnał RDX = numer sygnału do wysłania |
RAX = 0 RAX = błąd EINVAL, ESRCH, EPERM |
235 |
Zmień czas dostępu do pliku (sys_utimes) |
RDI = adres nazwy pliku (ASCIIZ) RSI = adres tablicy 2 struktur timeval, NULL gdy chcemy bieżący czas. Pierwsza struktura opisuje czas dostępu, druga - czas zmiany |
RAX = 0 RAX = błąd EACCES, ENOENT, EPERM, EROFS |
236 |
sys_vserver |
niezaimplementowane |
zawsze RAX = ENOSYS |
237 |
Ustaw politykę dla zakresu pamięci (sys_mbind) |
RDI = adres początku obszaru RSI = długość obszaru RDX = polityka R10 = adres DWORDa zawierającego maskę bitową węzłów R8 = długość maski w bitach R9 = flagi polityki |
RAX = 0 RAX = błąd EFAULT, EINVAL, ENOMEM, EIO |
238 |
Ustaw politykę pamięci NUMA (sys_set_mempolicy) |
RDI = polityka RSI = adres DWORDa zawierającego maskę bitową węzłów RDX = długość maski w bitach |
RAX = 0 RAX = błąd |
239 |
Pobierz politykę pamięci NUMA (sys_get_mempolicy) |
RDI = adres DWORDa, który otrzyma politykę RSI = NULL lub adres DWORDa, który otrzyma maskę węzłów RDX = maksymalna długość maski w bitach + 1 R10 = sprawdzany adres, jeśli potrzebny R8 = NULL lub MPOL_F_ADDR=2 (wtedy będzie zwrócona polityka dotycząca podanego adresu) |
RAX = 0 RAX = błąd |
240 |
Otwórz kolejkę wiadomości (sys_mq_open) |
RDI = adres nazwy, która musi zaczynać się ukośnikiem RSI = flagi dostępu (RDX = tryb) (R10 = adres struktury mq_attr lub NULL) |
RAX = deskryptor kolejki RAX = błąd EACCES, EINVAL, EEXIST, EMFILE, ENAMETOOLONG, ENFILE, ENOENT, ENOMEM, ENOSPC |
241 |
Usuń kolejkę wiadomości (sys_mq_unlink) |
RDI = adres nazwy, która musi zaczynać się ukośnikiem |
RAX = 0 RAX = błąd EACCES, ENAMETOOLONG, ENOENT |
242 |
Wyślij wiadomość do kolejki (sys_mq_timedsend) |
RDI = deskryptor kolejki RSI = adres napisu - treści wiadomości RDX = długość wiadomości R10 = priorytet (<=32768, wiadomości o większym numerze są przed tymi o mniejszym) R8 = adres struktury timespec, opisującej czas BEZWZGLĘDNY przedawnienia |
RAX = 0 RAX = błąd EAGAIN, EBADF, EINTR, EINVAL, EMSGSIZE, ETIMEOUT |
243 |
Odbierz wiadomość z kolejki (sys_mq_timederceive) |
RDI = deskryptor kolejki RSI = adres bufora na treść wiadomości RDX = długość bufora R10 = NULL lub adres DWORDa, który otrzyma priorytet wiadomości R8 = adres struktury timespec, opisującej czas BEZWZGLĘDNY przedawnienia |
RAX = 0 RAX = błąd EAGAIN, EBADF, EINTR, EINVAL, EMSGSIZE, ETIMEOUT, EBADMSG |
244 |
Powiadamianie o wiadomościach (sys_mq_notify) |
RDI = deskryptor kolejki RSI = NULL (brak powiadomień) lub adres struktury sigevent |
RAX = 0 RAX = błąd EBADF, EBUSY, EINVAL, ENOMEM |
245 |
sys_mq_getsetattr |
NIE UŻYWAĆ Interfejs do mq_getattr, mq_setattr |
brak danych |
246 |
Załaduj nowe jądro do późniejszego uruchomienia (sys_kexec_load) |
RDI = fizyczny adres, gdzie załadować jądro RSI = liczba segmentów podanych w RDX RDX = adres tablicy struktur kexec_segment R10 = zORowane flagi |
RAX = 0 RAX = błąd EBUSY, EINVAL, EPERM |
247 |
Czekaj na zmianę stanu innego procesu (sys_waitid) |
RDI = typ identyfikatora (0=czekaj na dowolnego potomka, 1=czekaj na proces o danym PID,
2=czekaj na członka grupy o danym GID) RSI = identyfikator: PID lub GID (nieważny dla RDI=0) RDX = adres struktury siginfo R10 = opcje opisujące, na jakie zmiany czekamy |
RAX = 0, wypełniona struktura siginfo RAX = błąd ECHILD, EINTR, EINVAL |
248 |
Dodanie klucza (sys_add_key) |
RDI = adres nazwy klucza do dodania ASCIIZ RSI = adres opisu klucza do dodania ASCIIZ RDX = adres danych klucza R10 = długość danych klucza w RDX R8 = identyfikator zbioru kluczy, do którego dodać znaleziony klucz. Można podać specjalny zbiór. |
RAX = numer dodanego klucza RAX = błąd EACCES, EINTR, EKEYEXPIRED, EKEYREVOKED, ENOMEM, ENOKEY, EINVAL |
249 |
Pobranie klucza (sys_request_key) |
RDI = adres nazwy klucza do pobrania ASCIIZ RSI = adres opisu klucza do pobrania ASCIIZ RDX = adres informacji służących do generowania klucza, gdy go nie znaleziono (ASCIIZ) R10 = identyfikator zbioru kluczy, do którego dodać znaleziony klucz. Można podać specjalny zbiór. |
RAX = numer znalezionego klucza RAX = błąd EACCES, EINTR, EDQUOT, EKEYEXPIRED, EKEYREJECTED, EKEYREVOKED, ENOMEM, ENOKEY |
250 |
Zarządzanie kluczami (sys_keyctl) |
RDI = polecenie ECX/RSI, EDX/RDX, ... - dalsze parametry |
RAX = numer znalezionego klucza RAX = błąd EACCES, EDQUOT, EKEYEXPIRED, EKEYREJECTED, EKEYREVOKED, ENOKEY |