   #Start Prev Next Contents Funkcje x86-32: 201-250

                   Opis funkcji systemowych syscall: 201-250

   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: 201-250

   Numer/ RAX Opis Argumenty Zwraca
   201
   Pobierz czas (sys_time)
   RDI = NULL lub adres bufora, ktory otrzyma kopie wyniku
   RAX = liczba sekund od 1 Stycznia 1970 minus 1
   RAX = blad EFAULT
     _________________________________________________________________

   202
   Szybka funkcja blokowania (sys_futex)
   RDI = sprawdzany adres
   RSI = operacja
   RDX = wartosc
   R10 = adres struktury timespec (czas oczekiwania) lub 0
   RAX zalezy od operacji
   RAX = blad EINVAL, EFAULT
     _________________________________________________________________

   203
   Ustaw maske procesorow dla procesu (sys_sched_setaffinity)
   RDI = PID procesu, ktorego maske ustawiamy (0=biezacy)
   RSI = dlugosc maski pod [RDX]
   RDX = adres maski bitowej. Najmlodszy bit maski oznacza, czy proces
   moze byc wykonany na pierwszym procesorze logicznym i tak dalej
   RAX = 0
   RAX = blad EINVAL, EFAULT, ESRCH, EPERM
     _________________________________________________________________

   204
   Pobierz maske procesorow dla procesu (sys_sched_getaffinity)
   RDI = PID procesu, ktorego maske pobieramy (0=biezacy)
   RSI = dlugosc maski pod [RDX]
   RDX = adres maski bitowej. Najmlodszy bit maski oznacza, czy proces
   moze byc wykonany na pierwszym procesorze logicznym i tak dalej
   RAX = 0
   RAX = blad EINVAL, EFAULT, ESRCH, EPERM
     _________________________________________________________________

   205
   Ustaw wpis w obszarze lokalnym watku TLS (sys_set_thread_area)
   RDI = adres struktury user_desc
   RAX = 0
   RAX = EINVAL, EFAULT, ESRCH
     _________________________________________________________________

   206
   Utworz asynchroniczny kontekst we/wy (sys_io_setup)
   RDI = liczba zdarzen, ktore kontekst moze otrzymac
   RSI = adres DWORDa (o wartosci zero), ktory otrzyma uchwyt do nowego
   kontekstu
   RAX = 0
   RAX = blad EINVAL, EFAULT, ENOSYS, ENOMEM, EAGAIN
     _________________________________________________________________

   207
   Zniszcz asynchroniczny kontekst we/wy (sys_io_destroy)
   RDI = uchwyt do usuwanego kontekstu
   RAX = 0
   RAX = blad EINVAL, EFAULT, ENOSYS
     _________________________________________________________________

   208
   Pobierz zdarzenia we/wy (sys_io_getevents)
   RDI = uchwyt do kontekstu
   RSI = minimalna liczba zdarzen do pobrania
   RDX = maksymalna liczba zdarzen do pobrania
   R10 = adres tablicy struktur io_event
   R8 = adres struktury timespec (czas oczekiwania) lub 0
   RAX = liczba odczytanych zdarzen
   RAX = blad EINVAL, EFAULT, ENOSYS
     _________________________________________________________________

   209
   Wyslij zdarzenia we/wy do przetworzenia (sys_io_submit)
   RDI = uchwyt do kontekstu
   RSI = liczba adresow struktur pod [RDX]
   RDX = adres tablicy adresow struktur iocb opisujacych zdarzenia do
   przetworzenia
   RAX = liczba wyslanych blokow we/wy
   RAX = blad EINVAL, EFAULT, ENOSYS, EBADF, EAGAIN
     _________________________________________________________________

   210
   Przerwij operacje we/wy (sys_io_cancel)
   RDI = uchwyt do kontekstu
   RSI = adres struktury iocb, opisujacej operacje do przerwania
   RDX = adres struktury io_event, ktora otrzyma przerwane dzialanie
   RAX = 0
   RAX = blad EINVAL, EFAULT, ENOSYS, EBADF, EAGAIN
     _________________________________________________________________

   211
   Pobierz wpis w obszarze lokalnym watku TLS (sys_get_thread_area)
   RDI = adres struktury user_desc
   RAX = 0
   RAX = blad EINVAL, EFAULT
     _________________________________________________________________

   212
   Pobierz sciezke wejscia do katalogu (sys_lookup_dcookie)
   RDI? = wartosc opisujaca wpis o katalogu
   RSI? = adres bufora, ktory otrzyma sciezke
   RDX? = dlugosc tego bufora
   RAX = dlugosc sciezki
   RAX = blad ENAMETOOLONG, EPERM, EINVAL, ENOMEM, ERANGE, EFAULT
     _________________________________________________________________

   213
   Utworz deskryptor pliku epoll (sys_epoll_create)
   RDI = liczba deskryptorow do zarezerwowania
   RAX = nowy deskryptor pliku
   RAX = blad 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 pamieci / stworz nieliniowe mapowanie pliku
   (sys_remap_file_pages)
   RDI = poczatkowy adres stron pamieci
   RSI = rozmiar przemapowywanego obszaru pamieci
   RDX = 0 (juz nieuzywane, musi byc 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 = blad EINVAL
     _________________________________________________________________

   217
   Pobierz wpisy o katalogach, wersja 64-bitowa (sys_getdents64)
   RDI = deskryptor otwartego katalogu
   RSI = adres obszaru pamieci na struktury dirent
   RDX = rozmiar obszaru pamieci pod [RSI]
   RAX = 0
   RAX = blad EBADF, EFAULT, EINVAL, ENOENT, ENOTDIR
     _________________________________________________________________

   218
   Utworz wskaznik do ID watku (sys_set_tid_address)
   RDI = wskaznik (adres), na ktorego wartosc ma byc ustawiona zmienna
   clear_child_tid jadra
   RAX = PID biezacego procesu
     _________________________________________________________________

   219
   Wywolaj ponownie (sys_restart_syscall)
   brak
   to, co zwroci ponowione wywolanie systemowe
     _________________________________________________________________

   220
   Operacja na semaforze z czasem (sys_semtimedop)
   RDI = identyfikator zestawu semaforow
   RSI = adres tablicy struktur sembuf
   RDX = liczba elementow w tablicy spod RSI
   R10 = adres struktury timespec, zawierajacej maksymalny czas
   oczekiwania
   RAX = 0
   RAX = blad E2BIG, EACCES, EAGAIN, EFAULT, EFBIG, EIDRM, EINTR, EINVAL,
   ENOMEM, ERANGE
     _________________________________________________________________

   221
   Zadeklaruj wzorce dostepu (sys_fadvise64_64)
   RDI = deskryptor pliku
   RSI = poczatek obszaru w pliku (offset)
   RDX = dlugosc obszaru pliku
   R10 = wzorzec dostepu
   RAX = 0
   RAX = blad EBADF, ESPIPE, EINVAL
     _________________________________________________________________

   222
   Utworz POSIX-owy licznik czasu (sys_timer_create)
   RDI = ID zegara, ktory bedzie podstawa mierzenia czasu
   RSI = 0 lub adres struktury sigevent
   RDX = adres zmiennej trzymajacej adres DWORDa, ktory otrzyma ID nowego
   zegara
   RAX = 0
   RAX = blad 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 = blad EINVAL
     _________________________________________________________________

   224
   Pobierz pozostaly czas na POSIX-owym liczniku czasu
   (sys_timer_gettime)
   RDI = ID zegara
   RSI = adres struktury itimerspec, ktora otrzyma wynik
   RAX = 0
   RAX = blad EINVAL
     _________________________________________________________________

   225
   Pobierz liczbe przekroczen POSIX-owego licznika czasu
   (sys_timer_getoverrun)
   RDI = ID zegara
   RAX = liczba przekroczen
   RAX = blad EINVAL
     _________________________________________________________________

   226
   Usun POSIX-owy licznik czasu (sys_timer_delete)
   RDI = ID zegara
   RAX = 0
   RAX = blad EINVAL
     _________________________________________________________________

   227
   Ustaw czas na danym zegarze (sys_clock_settime)
   RDI = ID zegara
   RSI = adres struktury timespec zawierajacej czas do ustawienia
   RAX = 0
   RAX = blad EINVAL, EFAULT, EINVAL
     _________________________________________________________________

   228
   Pobierz czas na danym zegarze (sys_clock_gettime)
   RDI = ID zegara
   RSI = adres struktury timespec, ktora otrzyma czas
   RAX = 0
   RAX = blad EINVAL, EFAULT, EINVAL
     _________________________________________________________________

   229
   Pobierz precyzje danego zegara (sys_clock_getres)
   RDI = ID zegara
   RSI = adres struktury timespec
   RAX = 0
   RAX = blad EINVAL, EFAULT, EINVAL
     _________________________________________________________________

   230
   Przerwa w oparciu o dany zegar (sys_clock_nanosleep)
   RDI = ID zegara
   RSI = flagi (TIMER_ABSTIME=1) kontrolujace rodzaj czasu oczekiwania
   (wzgledny lub nie)
   RDX = adres struktury timespec, ktora zawiera czas czekania
   R10 = adres struktury timespec (lub NULL), ktora otrzyma pozostaly
   czas
   RAX = 0
   RAX = blad EINTR, EFAULT, ENOTSUPP
     _________________________________________________________________

   231
   Zakoncz wszystkie watki procesu (sys_exit_group)
   RDI = status (kod wyjscia)
   nigdy nie powraca
     _________________________________________________________________

   232
   Czekaj na deskryptorze pliku epoll (sys_epoll_wait)
   RDI = deskryptor epoll
   RSI = adres tablicy struktur epoll_event
   RDX = maksymalna liczba zdarzen, na ktore bedziemy czekac
   R10 = czas czekania w milisekundach (-1 = nieskonczonosc)
   RAX = liczba deskryptorow gotowych
   RAX = blad 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 = blad ENOMEM, EBADF, EPERM, EINVAL
     _________________________________________________________________

   234
   Wyslij sygnal do pojedynczego procesu (sys_tgkill)
   RDI = identyfikator grupy watkow (niekoniecznie calego procesu)
   RSI = identyfikator watku, ktory ma otrzymac sygnal
   RDX = numer sygnalu do wyslania
   RAX = 0
   RAX = blad EINVAL, ESRCH, EPERM
     _________________________________________________________________

   235
   Zmien czas dostepu do pliku (sys_utimes)
   RDI = adres nazwy pliku (ASCIIZ)
   RSI = adres tablicy 2 struktur timeval, NULL gdy chcemy biezacy czas.
   Pierwsza struktura opisuje czas dostepu, druga - czas zmiany
   RAX = 0
   RAX = blad EACCES, ENOENT, EPERM, EROFS
     _________________________________________________________________

   236
   sys_vserver
   niezaimplementowane
   zawsze RAX = ENOSYS
     _________________________________________________________________

   237
   Ustaw polityke dla zakresu pamieci (sys_mbind)
   RDI = adres poczatku obszaru
   RSI = dlugosc obszaru
   RDX = polityka
   R10 = adres DWORDa zawierajacego maske bitowa wezlow
   R8 = dlugosc maski w bitach
   R9 = flagi polityki
   RAX = 0
   RAX = blad EFAULT, EINVAL, ENOMEM, EIO
     _________________________________________________________________

   238
   Ustaw polityke pamieci NUMA (sys_set_mempolicy)
   RDI = polityka
   RSI = adres DWORDa zawierajacego maske bitowa wezlow
   RDX = dlugosc maski w bitach
   RAX = 0
   RAX = blad
     _________________________________________________________________

   239
   Pobierz polityke pamieci NUMA (sys_get_mempolicy)
   RDI = adres DWORDa, ktory otrzyma polityke
   RSI = NULL lub adres DWORDa, ktory otrzyma maske wezlow
   RDX = maksymalna dlugosc maski w bitach + 1
   R10 = sprawdzany adres, jesli potrzebny
   R8 = NULL lub MPOL_F_ADDR=2 (wtedy bedzie zwrocona polityka dotyczaca
   podanego adresu)
   RAX = 0
   RAX = blad
     _________________________________________________________________

   240
   Otworz kolejke wiadomosci (sys_mq_open)
   RDI = adres nazwy, ktora musi zaczynac sie ukosnikiem
   RSI = flagi dostepu
   (RDX = tryb)
   (R10 = adres struktury mq_attr lub NULL)
   RAX = deskryptor kolejki
   RAX = blad EACCES, EINVAL, EEXIST, EMFILE, ENAMETOOLONG, ENFILE,
   ENOENT, ENOMEM, ENOSPC
     _________________________________________________________________

   241
   Usun kolejke wiadomosci (sys_mq_unlink)
   RDI = adres nazwy, ktora musi zaczynac sie ukosnikiem
   RAX = 0
   RAX = blad EACCES, ENAMETOOLONG, ENOENT
     _________________________________________________________________

   242
   Wyslij wiadomosc do kolejki (sys_mq_timedsend)
   RDI = deskryptor kolejki
   RSI = adres napisu - tresci wiadomosci
   RDX = dlugosc wiadomosci
   R10 = priorytet (<=32768, wiadomosci o wiekszym numerze sa przed tymi
   o mniejszym)
   R8 = adres struktury timespec, opisujacej czas BEZWZGLEDNY
   przedawnienia
   RAX = 0
   RAX = blad EAGAIN, EBADF, EINTR, EINVAL, EMSGSIZE, ETIMEOUT
     _________________________________________________________________

   243
   Odbierz wiadomosc z kolejki (sys_mq_timederceive)
   RDI = deskryptor kolejki
   RSI = adres bufora na tresc wiadomosci
   RDX = dlugosc bufora
   R10 = NULL lub adres DWORDa, ktory otrzyma priorytet wiadomosci
   R8 = adres struktury timespec, opisujacej czas BEZWZGLEDNY
   przedawnienia
   RAX = 0
   RAX = blad EAGAIN, EBADF, EINTR, EINVAL, EMSGSIZE, ETIMEOUT, EBADMSG
     _________________________________________________________________

   244
   Powiadamianie o wiadomosciach (sys_mq_notify)
   RDI = deskryptor kolejki
   RSI = NULL (brak powiadomien) lub adres struktury sigevent
   RAX = 0
   RAX = blad EBADF, EBUSY, EINVAL, ENOMEM
     _________________________________________________________________

   245
   sys_mq_getsetattr
   NIE UZYWAC
   Interfejs do mq_getattr, mq_setattr
   brak danych
     _________________________________________________________________

   246
   Zaladuj nowe jadro do pozniejszego uruchomienia (sys_kexec_load)
   RDI = fizyczny adres, gdzie zaladowac jadro
   RSI = liczba segmentow podanych w RDX
   RDX = adres tablicy struktur kexec_segment
   R10 = zORowane flagi
   RAX = 0
   RAX = blad EBUSY, EINVAL, EPERM
     _________________________________________________________________

   247
   Czekaj na zmiane stanu innego procesu (sys_waitid)
   RDI = typ identyfikatora (0=czekaj na dowolnego potomka, 1=czekaj na
   proces o danym PID, 2=czekaj na czlonka grupy o danym GID)
   RSI = identyfikator: PID lub GID (niewazny dla RDI=0)
   RDX = adres struktury siginfo
   R10 = opcje opisujace, na jakie zmiany czekamy
   RAX = 0, wypelniona struktura siginfo
   RAX = blad 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 = dlugosc danych klucza w RDX
   R8 = identyfikator zbioru kluczy, do ktorego dodac znaleziony klucz.
   Mozna podac specjalny zbior.
   RAX = numer dodanego klucza
   RAX = blad 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 sluzacych do generowania klucza, gdy go nie
   znaleziono (ASCIIZ)
   R10 = identyfikator zbioru kluczy, do ktorego dodac znaleziony klucz.
   Mozna podac specjalny zbior.
   RAX = numer znalezionego klucza
   RAX = blad EACCES, EINTR, EDQUOT, EKEYEXPIRED, EKEYREJECTED,
   EKEYREVOKED, ENOMEM, ENOKEY
     _________________________________________________________________

   250
   Zarzadzanie kluczami (sys_keyctl)
   RDI = polecenie
   ECX/RSI, EDX/RDX, ... - dalsze parametry
   RAX = numer znalezionego klucza
   RAX = blad EACCES, EDQUOT, EKEYEXPIRED, EKEYREJECTED, EKEYREVOKED,
   ENOKEY
     _________________________________________________________________

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