   #Start Prev Contents Funkcje x86-32: 301-349

                   Opis funkcji systemowych syscall: 301-328

   Jesli jakas funkcja zakonczy sie bledem, w RAX zwracana jest wartosc
   ujemna z przedzialu od -4096 do -1 wlacznie.

   Z drugiej strony, opisy funkcji na stronach manuala mowia, ze zwracane
   jest -1, a wartosc bledu jest zapisywana do zmiennej errno z
   biblioteki GLIBC. Dzieje sie tak tylko w przypadku, gdy korzystamy z
   interfejsu jezyka C (czyli deklarujemy i uruchamiamy zewnetrzne
   funkcje odpowiadajace wywolaniom systemowym i linkujemy nasz program z
   biblioteka jezyka C), a nie bezposrednio z wywolan systemowych (czyli
   syscall).

   Najbardziej aktualne informacje o funkcjach systemowych mozna znalezc
   zazwyczaj w sekcji 2 (lub 3) manuala, na przyklad man 2 open.

   Najnowsze wersje jadra mozna znalezc na www.kernel.org, a pliki z
   lista funkcji i ich numerow sa pod sciezkami:
     * arch/x86/include/asm/unistd_{32,64}.h
     * arch/x86/syscalls/syscall_{32,64}.tbl
     * arch/x86/entry/syscalls/syscall_{32,64}.tbl

   Najnowsze wersje stron manuala mozna znalezc tu:
   www.kernel.org/pub/linux/docs/man-pages.

   Napis ASCIIZ oznacza lancuch znakow ASCII zakonczony znakiem/bajtem
   Zerowym.

   Jesli potrzeba, przy kazdej funkcji jest odnosnik do opisu argumentow
   i innych dodatkowych informacji: typow danych, wartosci bledow,
   mozliwych wartosci parametrow itp.

   CAPTION: Podstawowe funkcje syscall: 301-328

   Numer/ RAX Opis Argumenty Zwraca
   301
   Zmiana znacznikow fanotify na obiekcie (sys_fanotify_mark)
   RDI = deskryptor fanotify
   RSI = flagi fanotify_mark mowiace, co zrobic
   RDX = maska zdarzen
   R10 = deskryptor obserwowanego obiektu lub katalogu, wzgledem ktorego
   brana jest sciezka
   R8 = sciezka ASCIIZ obserwowanego obiektu (jesli 0, brany jest
   deskryptor z R10)
   RAX = 0
   RAX = blad EBADF, EINVAL, ENOENT, ENOMEM, ENOSPC, ENOSYS, ENOTDIR
     _________________________________________________________________

   302
   Ustaw lub pobierz limity zasobow (sys_prlimit64)
   RDI = PID procesu (0 = biezacy)
   RSI = typ zasobu
   RDX = adres struktury rlimit z nowymi limitami
   R10 = adres struktury rlimit, ktora otrzyma biezace limity
   RAX = 0
   RAX = blad EFAULT, EINVAL, EPERM, ESRCH
     _________________________________________________________________

   303
   Przerob nazwe na uchwyt do pliku wzgledem katalogu
   (sys_name_to_handle_at)
   RDI = deskryptor katalogu
   RSI = sciezka do obiektu wzgledem katalogu
   RDX = adres do struktury file_handle, ktora otrzyma wynik
   R10 = adres zmiennej, ktora otrzyma ID systemu plikow
   R8 = flagi name_to_handle_at (te same, co dla sys_execveat)
   RAX = 0
   RAX = blad openat lub EFAULT, EINVAL, ENOENT, ENOTDIR, EOPNOTSUPP,
   EOVERFLOW
     _________________________________________________________________

   304
   Otworz plik poprzez uchwyt (sys_open_by_handle_at)
   RDI = ID systemu plikow lub AT_FDCWD=-100 dla biezacego katalogu
   RSI = adres do struktury file_handle, ktora zawiera uchwyt do pliku
   RDX = flagi open_by_handle_at (te same, co dla sys_open)
   RAX = 0
   RAX = blad openat lub EBADF, EFAULT, EINVAL, ELOOP, EPERM, ESTALE
     _________________________________________________________________

   305
   sys_clock_adjtime
   brak danych
   brak danych
     _________________________________________________________________

   306
   Synchronizuj system plikow zawierajacy dany plik (sys_syncfs)
   RDI = deskryptor pliku otwartego na systemie plikow do synchronizacji
   RAX = 0
   RAX = blad EBADF
     _________________________________________________________________

   307
   Wyslij wiele wiadomosci z gniazda (sys_sendmmsg)
   RDI = deskryptor otwartego gniazda
   RSI = adres tablicy struktur mmsghdr, z ktorych brac dane do wyslania
   RDX = liczba struktur mmsghdr spod [RSI]
   R10 = 0 lub zORowane flagi funkcji sendmsg
   RAX = liczba wyslanych wiadomosci
   RAX = blad funkcji sendmsg
     _________________________________________________________________

   308
   Powiaz watek z przestrzenia nazw (sys_setns)
   RDI = deskryptor jednego z plikow w /proc/[pid]/ns/
   RSI = 0 (oznaczajace dowolny typ przestrzeni nazw lub jeden z typow
   przestrzeni nazw)
   RAX = 0
   RAX = blad EBADF, EINVAL, ENOMEM, EPERM
     _________________________________________________________________

   309
   Pobierz procesor, na ktorym dziala watek (sys_getcpu)
   RDI = 0 lub adres zmiennej, ktora otrzyma numer procesora
   RSI = 0 lub adres zmiennej, ktora otrzyma numer wezla NUMA
   RDX = adres struktury getcpu_cache, ktora sluzyla jako pamiec
   podreczna dla tej funkcji; nieuzywane
   RAX = 0
   RAX=blad EFAULT
     _________________________________________________________________

   310
   Czytaj dane innego procesu (sys_process_vm_readv)
   RDI = PID procesu
   RSI = adres tablicy struktur iovec na odczytane dane
   RDX = liczba struktur w [RSI]
   R10 = adres tablicy struktur iovec z adresami danych do odczytania
   R8 = liczba struktur w [R10]
   R9 = flagi (nieuzywane, ustawic na zero)
   RAX = liczba odczytanych bajtow
   RAX = blad EINVAL, EFAULT, ENOMEM, EPERM, ESRCH
     _________________________________________________________________

   311
   Zapisz dane w innym procesie (sys_process_vm_writev)
   RDI = PID procesu
   RSI = adres tablicy struktur iovec na dane do zapisania
   RDX = liczba struktur w [RSI]
   R10 = adres tablicy struktur iovec z adresami miejsc do zapisania
   R8 = liczba struktur w [R10]
   R9 = flagi (nieuzywane, ustawic na zero)
   RAX = liczba zapisanych bajtow
   RAX = blad EINVAL, EFAULT, ENOMEM, EPERM, ESRCH
     _________________________________________________________________

   312
   Porownaj zasoby 2 procesow (sys_kcmp)
   RDI = PID pierwszego procesu
   RSI = PID drugiego procesu
   RDX = typ zasobu do porownania
   R10 = ID pierwszego zasobu (zalezy od typu)
   R8 = ID drugiego zasobu (zalezy od typu)
   RAX = 0, gdy dany zasob jest wspoldzielony w obu procesach
   RAX = 1, 2, lub 3, gdy dany zasob nie jest wspoldzielony w obu
   procesach
   RAX = blad EBADF, EINVAL, EPERM, ESRCH
     _________________________________________________________________

   313
   Zaladuj modul jadra z deskryptora pliku (sys_finit_module)
   RDI = deskryptor otwartego pliku z modulem jadra
   RSI = adres lancucha parametrow dla modulu - nazwa=wartosc (ASCIIZ)
   RDX = 0 lub zORowane flagi funkcji finit_module
   RAX = 0
   RAX = blad EBADMSG, EBUSY, EFAULT, ENOKEY, ENOMEM, EPERM, EBADF,
   EFBIG, EINVAL, ENOEXEC
     _________________________________________________________________

   314
   Ustaw polityke i atrybuty schedulera (sys_sched_setattr)
   RDI = PID procesu/watku lub 0 dla biezacego
   RSI = adres struktury sched_attr z parametrami do ustawienia
   RDX = flagi (0)
   RAX = 0
   RAX = blad EINVAL, ESRCH, E2BIG, EBUSY, EPERM
     _________________________________________________________________

   315
   Pobierz polityke i atrybuty schedulera (sys_sched_getattr)
   RDI = PID procesu/watku lub 0 dla biezacego
   RSI = adres struktury sched_attr, ktora otrzyma aktualne parametry
   RDX = rozmiar struktury podanej w ECX/RSI
   R10 = flagi (0)
   RAX = 0
   RAX = blad EINVAL, ESRCH, E2BIG
     _________________________________________________________________

   316
   Przenies plik/Zmien nazwe pliku wzglednie do katalogu (sys_renameat2)
   RDI = deskryptor otwartego katalogu zrodlowego lub wartosc
   AT_FDCWD=-100 oznaczajaca katalog biezacy
   RSI = adres starej nazwy (i ewentualnie sciezki) ASCIIZ
   RDX = deskryptor otwartego katalogu docelowego
   R10 = adres nowej nazwy (i ewentualnie sciezki) ASCIIZ
   R8 = 0 lub flagi funkcji renameat2
   RAX = 0
   RAX = blad EACCES, EBUSY, EDQUOT, EFAULT, EINVAL, EISDIR, ELOOP,
   EMLINK, ENAMETOOLONG, ENOENT, ENOMEM, ENOSPC, ENOTDIR, ENOTEMPTY,
   EEXIST, EPERM, EROFS, EXDEV, EBADF, ENOTDIR
     _________________________________________________________________

   317
   Operuj na stanie Secure Computing procesu (sys_seccomp)
   RDI = operacja (SECCOMP_SET_MODE_STRICT lub SECCOMP_SET_MODE_FILTER)
   RSI = 0 lub flagi dla operacji (SECCOMP_FILTER_FLAG_TSYNC dla
   SECCOMP_SET_MODE_FILTER)
   RDX = 0 dla SECCOMP_SET_MODE_STRICT lub adres listy struktur
   sock_fprog dla SECCOMP_SET_MODE_FILTER
   RAX = 0
   RAX = blad EACCES, EFAULT, EINVAL, ENOMEM, ESRCH
     _________________________________________________________________

   318
   Pobierz serie losowych bajtow (sys_getrandom)
   RDI = bufor do umieszczenia danych
   RSI = dlugosc bufora w RDI
   RDX = 0 lub flagi funkcji getrandom
   RAX = liczba zwroconych bajtow
   RAX = blad EINVAL, EFAULT, EAGAIN, EINTR
     _________________________________________________________________

   319
   Utworz anonimowy plik (sys_memfd_create)
   RDI = nazwa pliku
   RSI = 0 lub flagi funkcji memfd_create
   RAX = deskryptor utworzonego pliku
   RAX = blad EFAULT, EINVAL, EMFILE, ENFILE, ENOMEM
     _________________________________________________________________

   320
   Zaladuj nowe jadro do pozniejszego uruchomienia (sys_kexec_file_load)
   RDI = deskryptor otwartego pliku z jadrem
   RSI = deskryptor otwartego pliku z initrd
   RDX = dlugosc linii komend dla nowego jadra
   R10 = adres linii komend ASCIIZ dla nowego jadra
   R8 = 0 lub flagi funkcji kexec_file_load
   RAX = 0
   RAX = blad EBADF, EBUSY, EINVAL, ENOMEM, ENOEXEC, EPERM
     _________________________________________________________________

   321
   Wykonaj operacje na mapie lub programie BPF (sys_bpf)
   RDI = operacja
   RSI = adres listy struktur bpf_attr
   RDX = rozmiar struktury przekazanej w RSI
   RAX = nowy deskryptor w przypadku BPF_MAP_CREATE i BPF_PROG_LOAD
   RAX = 0
   RAX = blad EINVAL, EFAULT, EAGAIN, EINTR
     _________________________________________________________________

   322
   Uruchomienie innego programu wzglednie do katalogu (sys_execveat)
   RDI = deskryptor otwartego katalogu lub wartosc AT_FDCWD=-100
   RSI = adres nazwy (ze sciezka) programu ASCIIZ
   RDX = adres zakonczonej dwordem 0 listy adresow argumentow
   uruchamianego programu ASCIIZ
   R10 = adres zakonczonej dwordem 0 listy adresow zmiennych srodowiska
   dla uruchamianego programu ASCIIZ
   R8 = 0 lub flagi funkcji execveat
   nie wraca do programu wywolujacego
   RAX = blad E2BIG, EACCES, EINVAL, EOIO, EISDIR, ELIBBAD, ELOOP,
   ENFILE, ENOEXEC, ENOENT, ENOMEM, ENOTDIR, EFAULT, ENAMETOOLONG, EPERM,
   ETXTBUSY, EBADF
     _________________________________________________________________

   323
   sys_userfaultfd
   brak danych
   brak danych
     _________________________________________________________________

   324
   Wykonaj bariery pamieci - uporzadkuj operacje na pamieci
   (sys_membarrier)
   RDI = komenda membarrier
   RSI = flagi (0)
   RAX = 0 dla MEMBARRIER_CMD_SHARED
   RAX = zestaw obslugiwanych komend po MEMBARRIER_CMD_QUERY
   RAX = blad EINVAL, ENOSYS
     _________________________________________________________________

   325
   Zablokowanie stron w pamieci (sys_mlock2)
   RDI = adres obszaru pamieci (wyrownany do wielokrotnosci rozmiaru
   strony pamieci)
   RSI = dlugosc obszaru pamieci
   RDX = flagi mlock2
   RAX = 0
   RAX = blad EINVAL, EAGAIN, ENOMEM, EPERM
     _________________________________________________________________

   326
   Skopiuj zakres danych miedzy plikami (sys_copy_file_range)
   RDI = deskryptor pliku zrodlowego
   RSI = adres zmiennej trzymajacej pozycje poczatkowa odczytu (moze byc
   0 dla aktualnej pozycji) i ktora otrzyma nowa pozycje
   RDX = deskryptor pliku docelowego
   R10 = adres zmiennej trzymajacej pozycje poczatkowa zapisu (moze byc 0
   dla aktualnej pozycji) i ktora otrzyma nowa pozycje
   R8 = liczba bajtow do skopiowania
   R9 = flagi (0).
   RAX = liczba skopiowanych bajtow
   RAX = blad EBADF, EINVAL, EIO, ENOMEM, ENOSPC, EXDEV
     _________________________________________________________________

   327
   Odczyt danych do wielu buforow (sys_preadv2)
   RDI = deskryptor otwartego pliku
   RSI = adres tablicy struktur iovec, do ktorych zapisac dane
   RDX = liczba struktur iovec spod [RSI]
   R10 = numer bajtu, od ktorego czytac (offset w pliku)
   R9 = flagi preadv2
   RAX = liczba odczytanych bajtow
   RAX = blad funkcji sys_read, sys_lseek lub EINVAL
     _________________________________________________________________

   328
   Zapis danych z wielu buforow (sys_pwritev2 )
   RDI = deskryptor otwartego pliku
   RSI = adres tablicy struktur iovec, z ktorych brac dane do zapisania
   RDX = liczba struktur iovec spod [RSI]
   R10 = numer bajtu, od ktorego zapisywac (offset w pliku)
   R9 = flagi pwritev2 (te same, co dla preadv2)
   RAX = liczba zapisanych bajtow
   RAX = blad funkcji sys_write, sys_lseek lub EINVAL
     _________________________________________________________________

   Poprzednia czesc (klawisz dostepu 3)
   Spis tresci off-line (klawisz dostepu 1)
   Spis tresci on-line (klawisz dostepu 2)
   Ulatwienia dla niepelnosprawnych (klawisz dostepu 0)
