Opis funkcji systemowych syscall: 201-250

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.

Podstawowe funkcje syscall: 201-250
Numer/ RAX Opis ArgumentyZwraca
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



Poprzednia część (Alt+3)
Kolejna część (Alt+4)
Spis treści off-line (Alt+1)
Spis treści on-line (Alt+2)
Ułatwienia dla niepełnosprawnych (Alt+0)