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

                   Opis funkcji przerwania int 80h: 201-250

   Jesli jakas funkcja zakonczy sie bledem, w EAX/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
   przerwania int 80h).

   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 przerwania 80h: 201-250

   Numer/ EAX x86-64 RAX Opis Argumenty Zwraca
   201
   -
   Pobierz efektywne ID uzytkownika biezacego procesu (sys_geteuid32)
   nic
   EAX = efektywny UID
     _________________________________________________________________

   202
   -
   Pobierz efektywne ID grupy biezacego procesu (sys_getegid32)
   nic
   EAX = efektywny GID
     _________________________________________________________________

   203
   -
   Ustaw realny i efektywny ID uzytkownika (sys_setreuid32)
   EBX/RDI = realny ID uzytkownika (UID)
   ECX/RSI = efektywny UID
   EAX = 0
   EAX = blad EPERM
     _________________________________________________________________

   204
   -
   Ustaw realny i efektywny ID grupy (sys_setregid32)
   EBX/RDI = realny ID grupy (GID)
   ECX/RSI = efektywny GID
   EAX = 0
   EAX = blad EPERM
     _________________________________________________________________

   205
   -
   Pobierz liczbe dodatkowych grup (sys_getgroups32)
   EBX/RDI = rozmiar tablicy z ECX/RSI
   ECX/RSI = adres tablicy, gdzie zostana zapisane GID-y (DWORDY) grup
   dodatkowych
   EAX = liczba dodatkowych grup procesu
   EAX = blad EFAULT, EINVAL, EPERM
     _________________________________________________________________

   206
   -
   Ustaw liczbe dodatkowych grup (sys_setgroups32)
   EBX/RDI = rozmiar tablicy z ECX/RSI
   ECX/RSI = adres tablicy, gdzie zawierajaca GID-y (DWORDY)
   EAX = 0
   EAX = blad EFAULT, EINVAL, EPERM
     _________________________________________________________________

   207
   -
   Zmiana wlasciciela (sys_fchown32)
   EBX/RDI = deskryptor otwartego pliku
   ECX/RSI = nowy numer uzytkownika
   EDX/RDX = nowy numer grupy
   EAX = 0
   EAX = blad
     _________________________________________________________________

   208
   -
   Ustaw rozne ID uzytkownika (sys_setresuid32)
   EBX/RDI = realny UID lub -1 (wtedy jest bez zmian)
   ECX/RSI = efektywny UID lub -1 (bez zmian)
   EDX/RDX = zachowany (saved) UID lub -1 (bez zmian)
   EAX = 0
   EAX = blad EPERM
     _________________________________________________________________

   209
   -
   Pobierz rozne ID uzytkownika (sys_getresuid32)
   EBX/RDI = adres DWORDa, ktory otrzyma realny UID
   ECX/RSI = adres DWORDa, ktory otrzyma efektywny UID
   EDX/RDX = adres DWORDa, ktory otrzyma zachowany UID
   EAX = 0
   EAX = blad EFAULT
     _________________________________________________________________

   210
   -
   Ustaw realny, efektywny i zachowany ID grupy (sys_setresgid32)
   EBX/RDI = realny GID
   ECX/RSI = efektywny GID
   EDX/RDX = zachowany (saved) GID
   EAX = 0
   EAX = blad EPERM
     _________________________________________________________________

   211
   -
   Pobierz realny, efektywny i zachowany ID grupy (sys_getresgid32)
   EBX/RDI = adres DWORDa, ktory otrzyma realny GID
   ECX/RSI = adres DWORDa, ktory otrzyma efektywny GID
   EDX/RDX = adres DWORDa, ktory otrzyma zachowany (saved) GID
   EAX = 0
   EAX = blad EFAULT
     _________________________________________________________________

   212
   -
   Zmiana wlasciciela pliku (sys_chown32)
   EBX/RDI=adres sciezki do pliku
   ECX/RSI = UID nowego wlasciciela
   EDX/RDX = GID nowej grupy
   EAX = 0
   EAX = blad na przyklad EPERM, EROFS, EFAULT, ENOENT, ENAMETOOLONG,
   ENOMEM, ENOTDIR, EACCES, ELOOP
     _________________________________________________________________

   213
   -
   Ustaw identyfikator uzytkownika (sys_setuid32)
   EBX/RDI = nowy UID
   EAX = 0
   EAX = blad EPERM
     _________________________________________________________________

   214
   -
   Ustaw ID grupy biezacego procesu (sys_setgid32)
   EBX/RDI = nowy ID grupy
   EAX = 0
   EAX = blad EPERM
     _________________________________________________________________

   215
   -
   Ustal UID przy sprawdzaniu systemow plikow (sys_setfsuid32)
   EBX/RDI = nowy ID uzytkownika
   EAX = stary UID (zawsze)
     _________________________________________________________________

   216
   -
   Ustal GID przy sprawdzaniu systemow plikow (sys_setfsgid32)
   EBX/RDI = nowy ID grupy
   EAX = stary GID (zawsze)
     _________________________________________________________________

   217
   155
   Zmien glowny system plikow/katalog (sys_pivot_root)
   EBX/RDI = adres lancucha znakow - nowy glowny katalog biezacego
   procesu
   ECX/RSI = adres lancucha znakow - otrzyma stary glowny katalog
   biezacego procesu
   EAX = 0
   EAX = blad EBUSY, EINVAL, EPERM, ENOTDIR + bledy sys_stat
     _________________________________________________________________

   218
   27
   Pobierz informacje, czy strony pamieci sa w rdzeniu procesu
   (sys_mincore)
   EBX/RDI = adres poczatkowy sprawdzanych bajtow
   ECX/RSI = liczba sprawdzanych bajtow
   EDX/RDX = adres tablicy bajtow zdolnej pomiescic tyle bajtow, ile
   stron pamieci jest sprawdzanych. Najmlodszy bit w kazdym bajcie bedzie
   mowil o tym, czy dana strona pamieci jest obecna (=1), czy zrzucona na
   dysk (=0)
   EAX = 0
   EAX = blad EAGAIN, EINVAL, EFAULT, ENOMEM
     _________________________________________________________________

   219
   28
   Porada dla jadra o uzyciu pamieci (sys_madvise, sys_madvise1)
   EBX/RDI = adres poczatkowy bajtow, ktorych dotoczy porada
   ECX/RSI = liczba tych bajtow
   EDX/RDX = porada
   EAX = 0
   EAX = blad EAGAIN, EINVAL, EFAULT, ENOMEM
     _________________________________________________________________

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

   221
   -
   Kontrola nad deskryptorem pliku, wersja 64-bitowa (sys_fcntl64)
   EBX/RDI = deskryptor pliku
   ECX/RSI = kod komendy
   EDX/RDX zalezy od komendy
   EAX zalezy od komendy
   EAX = blad EACCES, EAGAIN, EBADF, EDEADLK, EFAULT, EINTR, EINVAL,
   EMFILE, ENOLOCK, EPERM
     _________________________________________________________________

   222
   -
   brak danych
   -
   -
     _________________________________________________________________

   223
   185
   Funkcja systemowa sys_security
   niezaimplementowane w jadrach 2.4
   zawsze EAX = ENOSYS
     _________________________________________________________________

   224
   186
   Pobierz identyfikator watku (sys_gettid)
   nic
   EAX = id watku
     _________________________________________________________________

   225
   187
   Czytaj kilka stron pliku z wyprzedzeniem do pamieci podrecznej
   (sys_readahead)
   EBX/RDI = deskryptor pliku
   ECX/RSI = miejsce w pliku, od ktorego zaczac
   EDX/RDX = liczba bajtow do przeczytania
   EAX = EBADF, gdy blad
     _________________________________________________________________

   226
   188
   Ustaw wartosc atrybutu rozszerzonego (sys_setxattr)
   EBX/RDI = adres sciezki pliku
   ECX/RSI = adres nazwy atrybutu
   EDX/RDX = wartosc atrybutu
   ESI/R10 = dlugosc atrybutu
   EDI/R8 = flaga (1=utworz, 2=zamien)
   EAX = 0
   EAX = blad
     _________________________________________________________________

   227
   189
   Ustaw wartosc atrybutu rozszerzonego (sys_lsetxattr)
   EBX/RDI = adres sciezki pliku, funkcja nie podaza za dowiazaniami
   symbolicznymi
   ECX/RSI = adres nazwy atrybutu
   EDX/RDX = wartosc atrybutu
   ESI/R10 = dlugosc atrybutu
   EDI/R8 = flaga (1=utworz, 2=zamien)
   EAX = 0
   EAX = blad
     _________________________________________________________________

   228
   190
   Ustaw wartosc atrybutu rozszerzonego (sys_fsetxattr)
   EBX/RDI = deskryptor pliku
   ECX/RSI = adres nazwy atrybutu
   EDX/RDX = wartosc atrybutu
   ESI/R10 = dlugosc atrybutu
   EDI/R8 = flaga (1=utworz, 2=zamien)
   EAX = 0
   EAX = blad
     _________________________________________________________________

   229
   191
   Pobierz wartosc atrybutu rozszerzonego (sys_getxattr)
   EBX/RDI = adres sciezki pliku
   ECX/RSI = adres nazwy atrybutu
   EDX/RDX = wartosc atrybutu
   ESI/R10 = dlugosc atrybutu
   EAX = 0
   EAX = blad
     _________________________________________________________________

   230
   192
   Pobierz wartosc atrybutu rozszerzonego (sys_lgetxattr)
   EBX/RDI = adres sciezki pliku, funkcja nie podaza za dowiazaniami
   symbolicznymi
   ECX/RSI = adres nazwy atrybutu
   EDX/RDX = wartosc atrybutu
   ESI/R10 = dlugosc atrybutu
   EAX = 0
   EAX = blad
     _________________________________________________________________

   231
   193
   Pobierz wartosc atrybutu rozszerzonego (sys_fgetxattr)
   EBX/RDI = deskryptor pliku
   ECX/RSI = adres nazwy atrybutu
   EDX/RDX = wartosc atrybutu
   ESI/R10 = dlugosc atrybutu
   EAX = 0
   EAX = blad
     _________________________________________________________________

   232
   194
   Pobierz liste nazw atrybutow rozszerzonych pliku (sys_listxattr)
   EBX/RDI = adres sciezki pliku
   ECX/RSI = adres tablicy na nazwy
   EDX/RDX = dlugosc tablicy
   EAX = 0
   EAX = blad
     _________________________________________________________________

   233
   195
   Pobierz liste nazw atrybutow rozszerzonych pliku (sys_llistxattr)
   EBX/RDI = adres sciezki pliku, funkcja nie podaza za dowiazaniami
   symbolicznymi
   ECX/RSI = adres tablicy na nazwy
   EDX/RDX = dlugosc tablicy
   EAX = 0
   EAX = blad
     _________________________________________________________________

   234
   196
   Pobierz liste nazw atrybutow rozszerzonych pliku (sys_flistxattr)
   EBX/RDI = deskryptor pliku
   ECX/RSI = adres tablicy na nazwy
   EDX/RDX = dlugosc tablicy
   EAX = 0
   EAX = blad
     _________________________________________________________________

   235
   197
   Usun atrybut rozszerzony pliku (sys_removexattr)
   EBX/RDI = adres sciezki pliku
   ECX/RSI = adres nazwy atrybutu do usuniecia
   EAX = 0
   EAX = blad
     _________________________________________________________________

   236
   198
   Usun atrybut rozszerzony pliku (sys_lremovexattr)
   EBX/RDI = adres sciezki pliku, funkcja nie podaza za dowiazaniami
   symbolicznymi
   ECX/RSI = adres nazwy atrybutu do usuniecia
   EAX = 0
   EAX = blad
     _________________________________________________________________

   237
   199
   Usun atrybut rozszerzony pliku (sys_fremovexattr)
   EBX/RDI = deskryptor pliku
   ECX/RSI = adres nazwy atrybutu do usuniecia
   EAX = 0
   EAX = blad
     _________________________________________________________________

   238
   200
   Zabij pojedyncze zadanie (sys_tkill)
   EBX/RDI = PID zadania (niekoniecznie calego procesu)
   ECX/RSI = numer sygnalu do wyslania
   EAX = 0
   EAX = blad EINVAL, ESRCH, EPERM
     _________________________________________________________________

   239
   40
   Kopiuj dane miedzy deskryptorami plikow (sys_sendfile64)
   EBX/RDI = deskryptor pliku wyjsciowego, otwartego do zapisu
   ECX/RSI = deskryptor pliku wejsciowego
   EDX/RDX = adres 64-bitowej zmiennej - numeru bajtu w pliku zrodlowym,
   od ktorego zaczac kopiowac
   ESI/R10 = liczba bajtow do skopiowania
   EAX = liczba zapisanych bajtow
   EAX = blad EBADF, EAGAIN, EINVAL, ENOMEM, EIO, EFAULT
     _________________________________________________________________

   240
   202
   Szybka funkcja blokowania (sys_futex)
   EBX/RDI = sprawdzany adres
   ECX/RSI = operacja
   EDX/RDX = wartosc
   ESI/R10 = adres struktury timespec (czas oczekiwania) lub 0
   EAX zalezy od operacji
   EAX = blad EINVAL, EFAULT
     _________________________________________________________________

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

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

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

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

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

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

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

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

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

   250
   -
   Funkcja systemowa sys_alloc_hugepages
   zaimplementowane tylko w jadrach 2.5.36 - 2.5.54, wiec nie bede
   omawial
   zawsze EAX = ENOSYS
     _________________________________________________________________

   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)
