   #Start Prev Next Contents Funkcje x86-64: 251-298

                   Opis funkcji przerwania int 80h: 251-300

   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: 251-300

   Numer/ EAX x86-64 RAX Opis Argumenty Zwraca
   251
   -
   Funkcja systemowa sys_free_hugepages
   zaimplementowane tylko w jadrach 2.5.36 - 2.5.54, wiec nie bede
   omawial
   zawsze EAX = ENOSYS
     _________________________________________________________________

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

   253*
   212
   Pobierz sciezke wejscia do katalogu (sys_lookup_dcookie)
   EBX:ECX/RDI? = wartosc opisujaca wpis o katalogu
   EDX/RSI? = adres bufora, ktory otrzyma sciezke
   ESI/RDX? = dlugosc tego bufora
   EAX = dlugosc sciezki
   EAX = blad ENAMETOOLONG, EPERM, EINVAL, ENOMEM, ERANGE, EFAULT
     _________________________________________________________________

   254
   213
   Utworz deskryptor pliku epoll (sys_epoll_create)
   EBX/RDI = wstepna liczba deskryptorow
   EAX = nowy deskryptor pliku
   EAX = blad ENOMEM
     _________________________________________________________________

   255
   233
   Kontroluj deskryptor pliku epoll (sys_epoll_ctl)
   EBX/RDI = deskryptor epoll
   ECX/RSI = kod operacji
   EDX/RDX = deskryptor pliku
   ESI/R10 = adres struktury epoll_event
   EAX = 0
   EAX = blad ENOMEM, EBADF, EPERM, EINVAL
     _________________________________________________________________

   256
   232
   Czekaj na deskryptorze pliku epoll (sys_epoll_wait)
   EBX/RDI = deskryptor epoll
   ECX/RSI = adres tablicy struktur epoll_event
   EDX/RDX = maksymalna liczba zdarzen, na ktore bedziemy czekac
   ESI/R10 = czas czekania w milisekundach (-1 = nieskonczonosc)
   EAX = liczba deskryptorow gotowych
   EAX = blad EFAULT, EINTR, EBADF, EINVAL
     _________________________________________________________________

   257
   216
   Przemapuj strony pamieci / stworz nieliniowe mapowanie pliku
   (sys_remap_file_pages)
   EBX/RDI = poczatkowy adres stron pamieci
   ECX/RSI = rozmiar przemapowywanego obszaru pamieci
   EDX/RDX = 0 (juz nieuzywane, musi byc 0)
   ESI/R10 = offset w pliku mierzony w jednostkach strony systemowej
   EDI/R8 = flagi (znaczenie takie, jak w sys_mmap, ale tu tylko
   MAP_NONBLOCK jest uznawane)
   EAX = 0
   EAX = blad EINVAL
     _________________________________________________________________

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

   259
   222
   Utworz POSIX-owy licznik czasu (sys_timer_create)
   EBX/RDI = ID zegara, ktory bedzie podstawa mierzenia czasu
   ECX/RSI = 0 lub adres struktury sigevent
   EDX/RDX = adres zmiennej trzymajacej adres DWORDa, ktory otrzyma ID
   nowego zegara
   EAX = 0
   EAX = blad EAGAIN, EINVAL, ENOTSUPP
     _________________________________________________________________

   260
   223
   Nastaw POSIX-owy licznik czasu (sys_timer_settime)
   EBX/RDI = ID zegara
   ECX/RSI = flagi (patrz: manual)
   EDX/RDX = adres struktury itimerspec
   ESI/R10 = adres struktury itimerspec
   EAX = 0
   EAX = blad EINVAL
     _________________________________________________________________

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

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

   263
   226
   Usun POSIX-owy licznik czasu (sys_timer_delete)
   EBX/RDI = ID zegara
   EAX = 0
   EAX = blad EINVAL
     _________________________________________________________________

   264
   227
   Ustaw czas na danym zegarze (sys_clock_settime)
   EBX/RDI = ID zegara
   ECX/RSI = adres struktury timespec
   EAX = 0
   EAX = blad EINVAL, EFAULT, EINVAL
     _________________________________________________________________

   265
   228
   Pobierz czas na danym zegarze (sys_clock_gettime)
   EBX/RDI = ID zegara
   ECX/RSI = adres struktury timespec
   EAX = 0
   EAX = blad EINVAL, EFAULT, EINVAL
     _________________________________________________________________

   266
   229
   Pobierz precyzje danego zegara (sys_clock_getres)
   EBX/RDI = ID zegara
   ECX/RSI = adres struktury timespec
   EAX = 0
   EAX = blad EINVAL, EFAULT, EINVAL
     _________________________________________________________________

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

   268*
   -
   Pobierz statystyki systemu plikow, wersja 64-bitowa (sys_statfs64)
   EBX/RDI = adres nazwy dowolnego pliku w zamontowanym systemie plikow
   ECX/RSI adres struktury statfs64
   EAX = 0
   EAX = blad
     _________________________________________________________________

   269*
   -
   Pobierz statystyki systemu plikow, wersja 64-bitowa (sys_fstatfs64)
   EBX/RDI = deskryptor dowolnego otwartego pliku w zamontowanym systemie
   plikow
   ECX/RSI = adres struktury statfs64
   EAX = 0
   EAX = blad
     _________________________________________________________________

   270
   200
   Zabij pojedynczy watek (sys_tgkill)
   EBX/RDI = GID grupy watku (-1 daje to samo co sys_tkill)
   ECX/RSI = PID watku
   EDX/RDX = numer sygnalu do wyslania
   EAX = 0
   EAX = blad EINVAL, ESRCH, EPERM
     _________________________________________________________________

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

   272
   221
   Zadeklaruj wzorce dostepu (sys_fadvise64_64)
   EBX/RDI = deskryptor pliku
   ECX/RSI = poczatek obszaru w pliku (offset)
   EDX/RDX = dlugosc obszaru pliku
   ESI/R10 = wzorzec dostepu
   EAX = 0
   EAX = blad EBADF, ESPIPE, EINVAL
     _________________________________________________________________

   273
   236
   sys_vserver
   niezaimplementowane w jadrach 2.4
   zawsze EAX = ENOSYS
     _________________________________________________________________

   274
   237
   Ustaw polityke dla zakresu pamieci (sys_mbind)
   EBX/RDI = adres poczatku obszaru
   ECX/RSI = dlugosc obszaru
   EDX/RDX = polityka
   ESI/R10 = adres DWORDa zawierajacego maske bitowa wezlow
   EDI/R8 = dlugosc maski w bitach
   EBP/R9 = flagi polityki
   EAX = 0
   EAX = blad EFAULT, EINVAL, ENOMEM, EIO
     _________________________________________________________________

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

   276
   238
   Ustaw polityke pamieci NUMA (sys_set_mempolicy)
   EBX/RDI = polityka
   ECX/RSI = adres DWORDa zawierajacego maske bitowa wezlow
   EDX/RDX = dlugosc maski w bitach
   EAX = 0
   EAX = blad
     _________________________________________________________________

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

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

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

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

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

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

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

   284
   247
   Czekaj na zmiane stanu innego procesu (sys_waitid)
   EBX/RDI = typ identyfikatora (0=czekaj na dowolnego potomka, 1=czekaj
   na proces o danym PID, 2=czekaj na czlonka grupy o danym GID)
   ECX/RSI = identyfikator: PID lub GID (niewazny dla EBX/RDI=0)
   EDX/RDX = adres struktury siginfo
   ESI/R10 = opcje opisujace, na jakie zmiany czekamy
   EAX = 0, wypelniona struktura siginfo
   EAX = blad ECHILD, EINTR, EINVAL
     _________________________________________________________________

   285
   -
   sys_setaltroot
   nieuzywane
   brak danych
     _________________________________________________________________

   286
   248
   Dodanie klucza (sys_add_key)
   EBX/RDI = adres nazwy klucza do dodania ASCIIZ
   ECX/RSI = adres opisu klucza do dodania ASCIIZ
   EDX/RDX = adres danych klucza
   ESI/R10 = dlugosc danych klucza w EDX/RDX
   EDI/R8 = identyfikator zbioru kluczy, do ktorego dodac znaleziony
   klucz. Mozna podac specjalny zbior.
   EAX = numer dodanego klucza
   EAX = blad EACCES, EINTR, EKEYEXPIRED, EKEYREVOKED, ENOMEM, ENOKEY,
   EINVAL
     _________________________________________________________________

   287
   249
   Pobranie klucza (sys_request_key)
   EBX/RDI = adres nazwy klucza do pobrania ASCIIZ
   ECX/RSI = adres opisu klucza do pobrania ASCIIZ
   EDX/RDX = adres informacji sluzacych do generowania klucza, gdy go nie
   znaleziono (ASCIIZ)
   ESI/R10 = identyfikator zbioru kluczy, do ktorego dodac znaleziony
   klucz. Mozna podac specjalny zbior.
   EAX = numer znalezionego klucza
   EAX = blad EACCES, EINTR, EDQUOT, EKEYEXPIRED, EKEYREJECTED,
   EKEYREVOKED, ENOMEM, ENOKEY
     _________________________________________________________________

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

   289
   251
   Ustaw priorytet kolejkowania We/wy procesu (sys_ioprio_set)
   EBX/RDI = typ
   ECX/RSI = informacja zalezna od typu
   EDX/RDX = nowy priorytet
   EAX = 0
   EAX = blad ESRCH, EPERM, EINVAL
     _________________________________________________________________

   290
   252
   Pobierz priorytet kolejkowania We/wy procesu (sys_ioprio_get)
   EBX/RDI = typ
   ECX/RSI = informacja zalezna od typu
   EAX = priorytet
   EAX = blad ESRCH, EPERM, EINVAL
     _________________________________________________________________

   291
   253
   Inicjalizacja kolejki zdarzen inotify (sys_inotify_init)
   nic
   EAX = deskryptor kolejki
   EAX = blad EMFILE, ENOMEM
     _________________________________________________________________

   292
   254
   Dodaj obiekt obserwowany kolejki zdarzen inotify
   (sys_inotify_add_watch)
   EBX/RDI = deskryptor kolejki inotify
   ECX/RSI = adres nazwy pliku ASCIIZ
   EDX/RDX = flagi inotify
   EAX = deskryptor "obserwacji" danego pliku
   EAX = blad EACCES, EBADF, EFAULT, EINVAL, ENOMEM, ENOSPC
     _________________________________________________________________

   293
   255
   Usun obserwacje obiektu z kolejki zdarzen inotify
   (sys_inotify_rm_watch)
   EBX/RDI = deskryptor kolejki inotify
   ECX/RSI = deskryptor obserwacji
   EAX = 0
   EAX = blad EBADF, EINVAL
     _________________________________________________________________

   294
   256
   Przenies strony pamieci procesu (sys_migrate_pages)
   EBX/RDI = PID procesu, ktorego strony przeniesc
   ECX/RSI = najwiekszy numer wezla +1
   EDX/RDX = adres tablicy DWORDow z co najmniej ECX/RSI bitami
   oznaczajacymi stare wezly
   ESI/R10 = adres tablicy DWORDow z co najmniej ECX/RSI bitami
   oznaczajacymi nowe wezly
   EAX = 0
   EAX = blad EPERM, ESRCH
     _________________________________________________________________

   295
   257
   Otworz plik wzglednie do katalogu (sys_openat)
   EBX/RDI = deskryptor otwartego katalogu lub wartosc AT_FDCWD=-100
   oznaczajaca katalog biezacy
   ECX/RSI = adres nazwy pliku ASCIIZ. Jesli sciezka jest wzgledna, jest
   brana jako wzgledna wzgledem podanego katalogu zamiast biezacego
   katalogu procesu
   EDX/RDX = bity dostepu
   ESI/R10 = prawa dostepu / tryb
   EAX = 0
   EAX = blad EBADF, ENOTDIR
     _________________________________________________________________

   296
   258
   Utworz katalog wzglednie do katalogu (sys_mkdirat)
   EBX/RDI = deskryptor otwartego katalogu lub wartosc AT_FDCWD=-100
   oznaczajaca katalog biezacy
   ECX/RSI = adres sciezki/nazwy ASCIIZ. Jesli sciezka jest wzgledna,
   jest brana jako wzgledna wzgledem podanego katalogu zamiast biezacego
   katalogu procesu
   EDX/RDX = prawa dostepu / tryb
   EAX = 0
   EAX = blad - kazdy zwiazany z systemem plikow lub prawami dostepu
     _________________________________________________________________

   297
   259
   Utworzenie pliku specjalnego wzglednie do katalogu (sys_mknodat)
   EBX/RDI = deskryptor otwartego katalogu lub wartosc AT_FDCWD=-100
   oznaczajaca katalog biezacy
   ECX/RSI = adres sciezki/nazwy ASCIIZ. Jesli sciezka jest wzgledna,
   jest brana jako wzgledna wzgledem podanego katalogu zamiast biezacego
   katalogu procesu
   EDX/RDX = typ urzadzenia OR prawa dostepu
   ESI/R10, EDI/R8 - wynik dzialania (zmodyfikowanego) makra makedev
   EAX = 0
   EAX = blad EACCES, EEXIST, EFAULT, EINVAL, ELOOP, ENAMETOOLONG,
   ENOENT, ENOMEM, ENOSPC, ENOTDIR, EPERM, EROFS
     _________________________________________________________________

   298
   260
   Zmiana wlasciciela obiektu polozonego wzglednie do katalogu
   (sys_fchownat)
   EBX/RDI = deskryptor otwartego katalogu lub wartosc AT_FDCWD=-100
   oznaczajaca katalog biezacy
   ECX/RSI = adres sciezki/nazwy ASCIIZ. Jesli sciezka jest wzgledna,
   jest brana jako wzgledna wzgledem podanego katalogu zamiast biezacego
   katalogu procesu
   EDX/RDX = identyfikator UID nowego wlasciciela obiektu
   ESI/R10 = identyfikator GID grupy, ktora stanie sie wlascicielem
   obiektu
   EDI/R8 = 0 lub wartosc AT_SYMLINK_NOFOLLOW=100h, wtedy nie bedzie
   podazal za dowiazaniami symbolicznymi
   EAX = 0
   EAX = blad EBADF, ENOTDIR, EINVAL
     _________________________________________________________________

   299
   261
   Zmiana czasow dostepu i zmian pliku polozonego wzglednie do katalogu
   (sys_futimesat)
   EBX/RDI = deskryptor otwartego katalogu lub wartosc AT_FDCWD=-100
   oznaczajaca katalog biezacy
   ECX/RSI = adres sciezki/nazwy ASCIIZ. Jesli sciezka jest wzgledna,
   jest brana jako wzgledna wzgledem podanego katalogu zamiast biezacego
   katalogu procesu
   EDX/RDX = adres tablicy 2 struktur timeval, NULL gdy chcemy biezacy
   czas. Pierwsza struktura opisuje czas dostepu, druga - czas zmiany
   EAX = 0
   EAX = blad EBADF, ENOTDIR
     _________________________________________________________________

   300
   262
   Pobierz status obiektu polozonego wzglednie do katalogu
   (sys_fstatat64)
   EBX/RDI = deskryptor otwartego katalogu lub wartosc AT_FDCWD=-100
   oznaczajaca katalog biezacy
   ECX/RSI = adres sciezki/nazwy ASCIIZ. Jesli sciezka jest wzgledna,
   jest brana jako wzgledna wzgledem podanego katalogu zamiast biezacego
   katalogu procesu
   EDX/RDX = adres struktury stat na dane
   ESI/R10 = 0 lub AT_SYMLINK_NOFOLLOW (=0x100), gdy nie chcemy
   dereferencjonowac dowiazan
   EAX = 0
   EAX = blad EBADF, ENOTDIR, EINVAL, bledy sys_stat
     _________________________________________________________________

   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)
