Opis funkcji systemowych syscall: 251-300

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: 251-300
Numer/ RAX Opis ArgumentyZwraca
251
Ustaw priorytet kolejkowania We/wy procesu (sys_ioprio_set)
RDI = typ
RSI = informacja zależna od typu
RDX = nowy priorytet
RAX = 0
RAX = błąd ESRCH, EPERM, EINVAL

252
Pobierz priorytet kolejkowania We/wy procesu (sys_ioprio_get)
RDI = typ
RSI = informacja zależna od typu
RAX = priorytet
RAX = błąd ESRCH, EPERM, EINVAL

253
Inicjalizacja kolejki zdarzeń inotify (sys_inotify_init)
nic
RAX = deskryptor kolejki
RAX = błąd EMFILE, ENFILE, ENOMEM

254
Dodaj obiekt obserwowany kolejki zdarzeń inotify (sys_inotify_add_watch)
RDI = deskryptor kolejki inotify
RSI = adres nazwy pliku ASCIIZ
RDX = flagi inotify
RAX = deskryptor obserwacji danego pliku
RAX = błąd EACCES, EBADF, EFAULT, EINVAL, ENOMEM, ENOSPC

255
Usuń obserwację obiektu z kolejki zdarzeń inotify (sys_inotify_rm_watch)
RDI = deskryptor kolejki inotify
RSI = deskryptor obserwacji
RAX = 0
RAX = błąd EBADF, EINVAL

256
Przenieś strony pamięci procesu (sys_migrate_pages)
RDI = PID procesu, którego strony przenieść
RSI = największy numer węzła +1
RDX = adres tablicy DWORDów z co najmniej ECX/RSI bitami oznaczającymi stare węzły
R10 = adres tablicy DWORDów z co najmniej ECX/RSI bitami oznaczającymi nowe węzły
RAX = 0
RAX = błąd EPERM, ESRCH

257
Otwórz plik względnie do katalogu (sys_openat)
RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RSI = adres nazwy pliku ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu
RDX = bity dostępu
R10 = prawa dostępu / tryb
RAX = 0
RAX = błąd EBADF, ENOTDIR

258
Utwórz katalog względnie do katalogu (sys_mkdirat)
RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu
RDX = prawa dostępu / tryb
RAX = 0
RAX = błąd - każdy związany z systemem plików lub prawami dostępu

259
Utworzenie pliku specjalnego względnie do katalogu (sys_mknodat)
RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu
RDX = typ urządzenia OR prawa dostępu
R10, R8 - wynik działania (zmodyfikowanego) makra makedev
RAX = 0
RAX = błąd EACCES, EEXIST, EFAULT, EINVAL, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOSPC, ENOTDIR, EPERM, EROFS

260
Zmiana właściciela obiektu położonego względnie do katalogu (sys_fchownat)
RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu
RDX = identyfikator UID nowego właściciela obiektu
R10 = identyfikator GID grupy, która stanie się właścicielem obiektu
R8 = 0 lub wartość AT_SYMLINK_NOFOLLOW=100h, wtedy nie będzie podążał za dowiązaniami symbolicznymi
RAX = 0
RAX = błąd EBADF, ENOTDIR, EINVAL

261
Zmiana czasów dostępu i zmian pliku położonego względnie do katalogu (sys_futimesat)
RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu
RDX = 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 EBADF, ENOTDIR

262
Pobierz status obiektu położonego względnie do katalogu (sys_fstatat64)
RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu
RDX = adres struktury stat na dane
R10 = 0 lub AT_SYMLINK_NOFOLLOW (=0x100), gdy nie chcemy dereferencjonować dowiązań
RAX = 0
RAX = błąd EBADF, ENOTDIR, EINVAL, błędy sys_stat

263
Usuń obiekt względnie do katalogu (sys_ulinkat)
RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu
RDX = 0 lub AT_REMOVEDIR (=0x200), gdy chcemy usuwać katalogi
RAX = 0
RAX = błąd EBADF, ENOTDIR, EINVAL

264
Przenieś plik/Zmień nazwę pliku względnie do katalogu (sys_renameat)
RDI = deskryptor otwartego katalogu źródłowego lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RSI = adres starej nazwy (i ewentualnie ścieżki) ASCIIZ
RDX = deskryptor otwartego katalogu docelowego
R10 = adres nowej nazwy (i ewentualnie ścieżki) ASCIIZ
RAX = 0
RAX = błąd EBUSY, EEXIST, EISDIR, ENOTEMPTY, EXDEV (i inne błędy systemu plików), EBADF, ENOTDIR

265
Utworzenie twardego dowiązania do pliku względnie do katalogu (sys_linkat)
RDI = deskryptor otwartego katalogu źródłowego lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RSI = adres nazwy istniejącego pliku ASCIIZ
RDX = deskryptor otwartego katalogu docelowego
R10 = adres nazwy nowego pliku ASCIIZ
R8 = 0 (flagi)
RAX = 0
RAX=błąd EACCES, EIO, EPERM, EEXIST, EFAULT, ELOOP, EMLINK, ENAMETOOLONG, ENOENT, ENOMEM, ENOSPC, ENOTDIR, EROFS, EXDEV

266
Stwórz dowiązanie symboliczne do pliku względnie do katalogu (sys_symlinkat)
RDI = adres nazwy pliku ASCIIZ
RSI = deskryptor otwartego katalogu docelowego lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RDX = adres nazwy linku ASCIIZ
RAX = 0
RAX = błędy związane z uprawnieniami lub systemem plików

267
Przeczytaj zawartość linku symbolicznego względnie do katalogu (sys_readlinkat)
RDI = deskryptor otwartego katalogu źródłowego lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RSI = adres nazwy dowiązania symbolicznego ASCIIZ
RDX = adres bufora, który otrzyma przeczytaną informację
R10 = długość bufora
RAX = 0
RAX = błąd EBADF, ENOTDIR

268
Zmiana uprawnień obiektu względnie do katalogu (sys_fchmodat)
RDI = deskryptor otwartego katalogu źródłowego lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RSI = adres nazwy pliku ASCIIZ
RDX = nowe prawa dostępu
R10 = flagi, musi być zero
RAX = 0
RAX = błąd EBADF, ENOTDIR

269
Sprawdź uprawnienia dostępu do pliku (sys_faccessat)
RDI = deskryptor otwartego katalogu źródłowego lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RSI = adres nazwy pliku ASCIIZ
RDX = prawa dostępu / tryb (wartości R_OK, W_OK, X_OK)
R10 = flagi: 0 lub AT_SYMLINK_NOFOLLOW=100h (nie podążaj za dowiązaniami symbolicznymi) lub AT_EACCESS=0x200 (sprawdzanie według efektywnych UID i GID)
RAX = 0
RAX = błąd EBADF, ENOTDIR, EINVAL

270
Oczekiwanie zmiany stanu deskryptora(ów) (sys_pselect6)
RDI = najwyższy numer spośród deskryptorów + 1
RSI = adres tablicy deskryptorów sprawdzanych, czy można z nich czytać
RDX = adres tablicy deskryptorów sprawdzanych, czy można do nich pisać
R10 = adres tablicy deskryptorów sprawdzanych, czy nie wystąpił u nich wyjątek
R8 = adres struktury timespec zawierającą maksymalny czas oczekiwania
R9 = adres struktury sigset_t zawierającą maskę sygnałów do ustawienia na czas wywołania tej funkcji
RAX = całkowita liczba deskryptorów, która pozostała w tablicach
RAX = 0, gdy skończył się czas
RAX = błąd EBADF, EINTR, EINVAL, ENOMEM

271
Czekaj na zdarzenia na deskryptorze (sys_ppoll)
RDI = adres tablicy struktur pollfd
RSI = liczba struktur pollfd w tablicy
RDX = adres struktury timespec - czas oczekiwania lub 0 (nieskończoność)
R10 = adres struktury sigset_t
RAX = liczba odpowiednich deskryptorów
RAX = 0, gdy czas upłynął
RAX = błąd EFAULT, EINTR, EINVAL, EBADF, ENOMEM

272
Cofnij współdzielenie (sys_unshare)
RDI = CLONE_FILES, CLONE_FS lub CLONE_NEWNS spośród flag
RAX = 0
RAX=błąd EPERM, ENOMEM, EINVAL

273
Ustaw listę sprawnych futeksów (sys_set_robust_list)
RDI = adres pierwszego elementu listy struktur typu robust_list_head
RSI = rozmiar elementu listy podanej przez RDI
RAX = 0
RAX = błąd EINVAL

274
Pobierz listę sprawnych futeksów (sys_get_robust_list)
RDI = PID procesu
RSI = adres zmiennej, która otrzyma adres pierwszego elementu listy struktur typu robust_list_head
RDX = adres zmiennej, która otrzyma rozmiar elementu listy podanej przez RSI
RAX = 0
RAX = błąd EPERM, ESRCH, EFAULT

275
Spleć dane z/do potoku (sys_splice)
RDI = wejściowy deskryptor pliku
RSI = offset w pliku wejściowym, skąd czytać dane (0 dla potoków)
RDX = wyjściowy deskryptor pliku
R10 = offset w pliku wyjściowym, dokąd zapisać dane (0 dla potoków)
R8 = maksymalna liczba bajtów do przeniesienia
R9 = flagi
RAX = liczba przeniesionych bajtów
RAX=błąd EBADF, ESPIPE, ENOMEM, EINVAL

276
Duplikowanie zawartości potoku (sys_tee)
RDI = wejściowy deskryptor pliku
RSI = wyjściowy deskryptor pliku
RDX = maksymalna liczba bajtów do przeniesienia
R10 = flagi (te same, co dla sys_splice)
RAX = liczba zduplikowanych bajtów
RAX=błąd ENOMEM, EINVAL

277
Synchronizuj segment pliku z dyskiem (sys_sync_file_range)
RDI = deskryptor pliku
RSI = początek zakresu danych do synchronizacji / RSI wskazuje na 64 bity adresu początku danych?
RDX = liczba bajtów do zsynchronizowania / RDX wskazuje na 64-bitową liczbę bajtów do zsynchronizowania?
R10 = flagi synchronizacji
RAX = 0
RAX=błąd EBADF, EIO, EINVAL, ENOMEM, ENOSPC, ESPIPE

278
Spleć strony pamięci do potoku (sys_vmsplice)
RDI = wejściowy deskryptor potoku
RSI = adres tablicy struktur iovec
RDX = liczba elementów w tablicy pod [RSI]
R10 = flagi (te same, co dla sys_splice)
RAX = liczba bajtów przeniesionych do potoku
RAX=błąd EBADF, ENOMEM, EINVAL

279
Przesuń strony pamięci procesu (sys_move_pages)
RDI = PID procesu
RSI = liczba stron do przeniesienia
RDX = adres tablicy adresów stron
R10 = adres tablicy liczb całkowitych określających żądane miejsce dla danej strony
R8 = adres tablicy na liczby całkowite, które otrzymają status wykonanej operacji
R9 = flagi określające typ stron do przeniesienia (MPOL_MF_MOVE=2 oznacza tylko strony procesu, MPOL_MF_MOVE_ALL=4 oznacza wszystkie strony)
RAX = 0
RAX=błąd E2BIG, EACCES, EFAULT, EINVAL, ENODEV, ENOENT, EPERM, ESRCH

280
Zmień znaczniki czasu pliku (sys_utimensat)
RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
RSI = adres nazwy pliku
RDX = adres dwuelementowej tablicy struktur timespec, opisujących czas dostępu i zmiany
R10 = flagi: 0 lub AT_SYMLINK_NOFOLLOW=0x100 (nie podążaj za dowiązaniami symbolicznymi)
RAX = 0
RAX=błąd EACCES, EBADF, EFAULT, EINVAL, ELOOP, ENAMETOOLONG, ENOENT, ENOTDIR, EPERM, EROFS, ESRCH

281
Czekaj na deskryptorze pliku epoll (sys_epoll_pwait)
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ść)
R8 = adres zestawu sygnałów (tablicy 32 DWORDów), które też przerwą czekanie
RAX = liczba deskryptorów gotowych
RAX = błąd EFAULT, EINTR, EBADF, EINVAL

282
Stwórz deskryptor pliku do otrzymywania sygnałów (sys_signalfd)
RDI = deskryptor: -1, gdy tworzymy nowy lub nieujemny, gdy zmieniamy istniejący
RSI = adres maski sygnałów (sigset), które chcemy otrzymywać
RAX = deskryptor pliku
RAX=błąd EBADF, EINVAL, EMFILE, ENFILE, ENODEV, ENOMEM

283
Stwórz nowy czasomierz (sys_timerfd_create)
RDI = identyfikator zegara (CLOCK_REALTIME=0 lub CLOCK_MONOTONIC=1)
RSI = flagi: 0 lub zORowane wartości TFD_NONBLOCK (=04000 ósemkowo, operacje mają być nieblokujące), TFD_CLOEXEC (=02000000 ósemkowo, zamknij w czasie wywołania exec)
RAX = deskryptor pliku
RAX=błąd EINVAL, EMFILE, ENFILE, ENODEV, ENOMEM

284
Stwórz deskryptor pliku do otrzymywania zdarzeń (sys_eventfd)
RDI = wstępna wartość licznika zdarzeń
RAX = deskryptor pliku
RAX=błąd EINVAL, EMFILE, ENFILE, ENODEV, ENOMEM

285
Manipulacja przestrzenią pliku (sys_fallocate)
RDI = deskryptor pliku
RSI = tryb = FALLOC_FL_KEEP_SIZE (alokuje i zeruje przestrzeń na dysku w podanym zakresie bajtów) = 1
RDX = offset początku zakresu bajtów w pliku
R10 = liczba bajtów w zakresie
RAX = liczba deskryptorów gotowych
RAX = błąd EFAULT, EINTR, EBADF, EINVAL

286
Uruchom lub zatrzymaj czasomierz (sys_timerfd_settime)
RDI = deskryptor pliku czasomierza
RSI = flagi (0 uruchamia czasomierz względy, TFD_TIMER_ABSTIME=1 - bezwzględny)
RDX = adres struktury itimerspec, zawierającej początkowy czas
R10 = adres struktury itimerspec, która otrzyma aktualny czas
RAX = 0
RAX=błąd EINVAL, EFAULT, EBADF

287
Pobierz czas na czasomierzu (sys_timerfd_gettime)
RDI = deskryptor pliku czasomierza
RSI = adres struktury itimerspec, która otrzyma aktualny czas
RAX = 0
RAX=błąd EINVAL, EFAULT, EBADF

288
sys_paccept
brak danych
brak danych

289
Stwórz deskryptor pliku do otrzymywania sygnałów (sys_signalfd4)
RDI = deskryptor: -1, gdy tworzymy nowy lub nieujemny, gdy zmieniamy istniejący
RSI = adres maski sygnałów (sigset), które chcemy otrzymywać
RDX = flagi: 0 lub zORowane wartości SFD_NONBLOCK (=04000 ósemkowo, operacje mają być nieblokujące), SFD_CLOEXEC (=02000000 ósemkowo, zamknij w czasie wywołania exec)
RAX = deskryptor pliku
RAX=błąd EBADF, EINVAL, EMFILE, ENFILE, ENODEV, ENOMEM

290
Stwórz deskryptor pliku do otrzymywania zdarzeń (sys_eventfd2)
RDI = wstępna wartość licznika zdarzeń
RSI = flagi: 0 lub zORowane wartości EFD_NONBLOCK (=04000 ósemkowo, operacje mają być nieblokujące), EFD_CLOEXEC (=02000000 ósemkowo, zamknij w czasie wywołania exec)
RAX = deskryptor pliku
RAX=błąd EINVAL, EMFILE, ENFILE, ENODEV, ENOMEM

291
Utwórz deskryptor pliku epoll (sys_epoll_create1)
RDI = flagi: 0 lub EPOLL_CLOEXEC (=02000000 ósemkowo, zamknij w czasie wywołania exec)
RAX = nowy deskryptor pliku
RAX = błąd ENOMEM, EINVAL, EMFILE, ENFILE

292
Zamień deskryptor zduplikowanym deskryptorem pliku (sys_dup3)
RDI = deskryptor do zduplikowania
RSI = deskryptor, do którego powinien być przyznany duplikat
RDX = flagi: 0 lub O_CLOEXEC (=02000000 ósemkowo, zamknij w czasie wywołania exec)
RAX = zduplikowany deskryptor
RAX = błąd EBADF, EMFILE, EBUSY, EINTR, EINVAL

293
Utwórz potok (sys_pipe2)
RDI = adres tablicy dwóch DWORDów
RSI = flagi: 0 lub zORowane wartości O_NONBLOCK (=04000 ósemkowo, operacje mają być nieblokujące), O_CLOEXEC (=02000000 ósemkowo, zamknij w czasie wywołania exec)
RAX = 0 i pod [RDI]: deskryptor odczytu z potoku fd(0) pod [RDI], deskryptor zapisu do potoku fd(1) pod [RDI+4]
RAX = błąd EFAULT, EMFILE, ENFILE, EINVAL

294
Inicjalizacja kolejki zdarzeń inotify (sys_inotify_init1)
RDI = flagi: 0 lub zORowane wartości IN_NONBLOCK (=04000 ósemkowo, operacje mają być nieblokujące), IN_CLOEXEC (=02000000 ósemkowo, zamknij w czasie wywołania exec)
RAX = deskryptor kolejki
RAX = błąd EMFILE, ENFILE, ENOMEM, EINVAL

295
Odczyt danych do wielu buforów (sys_preadv)
RDI = deskryptor otwartego pliku
RSI = adres tablicy struktur iovec, do których zapisać dane
RDX = liczba struktur iovec spod [RSI]
R10 = numer bajtu, od którego czytać (offset w pliku)
RAX = liczba odczytanych bajtów
RAX = błąd funkcji sys_read, sys_lseek lub EINVAL

296
Zapis danych z wielu buforów (sys_pwritev)
RDI = deskryptor otwartego pliku
RSI = adres tablicy struktur iovec, z których brać dane do zapisania
RDX = liczba struktur iovec spod [RSI]
R10 = numer bajtu, od którego zapisywać (offset w pliku)
RAX = liczba zapisanych bajtów
RAX = błąd funkcji sys_write, sys_lseek lub EINVAL

297
Zakolejkuj dane i sygnał dla wątku (sys_rt_tgsigqueueinfo)
RDI = ID grupy wątków
RSI = ID wątku
RDX = sygnał do wysłania
R10 = adres struktury siginfo z danymi do wysłania
RAX = 0
RAX = błąd EAGAIN, EINVAL, EPERM, ESRCH

298
sys_perf_counter_open
brak danych
brak danych

299
Odbierz wiele wiadomości z gniazda (sys_recvmmsg)
RDI = deskryptor otwartego gniazda
RSI = adres tablicy struktur mmsghdr, do których zapisać dane
RDX = liczba struktur mmsghdr spod [RSI]
R10 = 0 lub zORowane flagi funkcji recvmsg i dodatkowa flaga MSG_WAITFORONE (=0x10000) oznaczająca czekanie na jedną wiadomość
R8 = adres struktury timespec oznaczającej czas czekania lub 0 (czekanie bez końca)
RAX = liczba otrzymanych wiadomości
RAX = błąd funkcji recvmsg lub EINVAL

300
Utwórz grupę fanotify (sys_fanotify_init)
RDI = flagi fanotify
RSI = O_RDONLY, O_WRONLY, O_RDWR, O_LARGEFILE, O_CLOEXEC z bitów dostępu jako flagi zdarzeń
RAX = nowy deskryptor pliku
RAX = błąd EINVAL, EMFILE, ENOMEM, ENOSYS, EPERM



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