   #Start Prev Next Contents Funkcje x86-64: 151-200

                   Opis funkcji przerwania int 80h: 151-200

   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: 151-200

   Numer/ EAX x86-64 RAX Opis Argumenty Zwraca
   151
   150
   Odblokowanie stron pamieci (sys_munlock)
   EBX/RDI = adres obszaru pamieci (wyrownany do wielokrotnosci rozmiaru
   strony pamieci)
   ECX/RSI = dlugosc obszaru pamieci
   EAX = 0
   EAX = blad EINVAL, ENOMEM
     _________________________________________________________________

   152
   151
   Zablokowanie calej pamieci procesu (sys_mlockall)
   EBX/RDI = flagi blokowania pamieci
   EAX = 0
   EAX = blad EINVAL, ENOMEM, EAGAIN, EPERM
     _________________________________________________________________

   153
   152
   Odblokowanie calej pamieci procesu (sys_munlockall)
   nic
   EAX = 0
   EAX = blad.
     _________________________________________________________________

   154
   142
   Ustaw parametry szeregowania zadan (sys_sched_setparam)
   EBX/RDI = PID procesu
   ECX/RSI = adres struktury sched_param, zawierajacej dane
   EAX = 0
   EAX = blad EINVAL, ESRCH, EPERM
     _________________________________________________________________

   155
   143
   Pobierz parametry szeregowania zadan (sys_sched_getparam)
   EBX/RDI = PID procesu
   ECX/RSI = adres struktury sched_param, ktora otrzyma wynik
   EAX = 0
   EAX = blad EINVAL, ESRCH, EPERM
     _________________________________________________________________

   156
   144
   Ustaw parametry/algorytm szeregowania zadan (sys_sched_setsheduler)
   EBX/RDI = PID procesu
   ECX/RSI = polityka
   ECX/RSI = adres struktury sched_param, zawierajacej dane
   EAX = 0
   EAX = blad EINVAL, ESRCH, EPERM
     _________________________________________________________________

   157
   145
   Pobierz parametry/algorytm szeregowania zadan (sys_sched_getsheduler)
   EBX/RDI = PID procesu
   EAX = polityka
   EAX = blad EINVAL, ESRCH, EPERM
     _________________________________________________________________

   158
   24
   Oddanie procesora innym procesom (sys_sched_yield)
   nic
   EAX = 0
   EAX = blad.
     _________________________________________________________________

   159
   146
   Pobierz maksymalny priorytet statyczny (sys_sched_get_priority_max)
   EBX/RDI = polityka
   EAX = maksymalny priorytet dla tej polityki
   EAX = blad EINVAL
     _________________________________________________________________

   160
   147
   Pobierz minimalny priorytet statyczny (sys_sched_get_priority_min)
   EBX/RDI = polityka
   EAX = minimalny priorytet dla tej polityki
   EAX = blad EINVAL
     _________________________________________________________________

   161
   148
   Pobierz dlugosc czasu w szeregowaniu cyklicznym
   (sys_sched_rr_get_interval)
   EBX/RDI = PID procesu (0 = ten proces)
   ECX/RSI = adres struktury timeval, ktora otrzyma wynik
   EAX = 0
   EAX = blad ESRCH, ENOSYS
     _________________________________________________________________

   162
   35
   Pauza w wykonywaniu programu (sys_nanosleep)
   EBX/RDI = adres struktury timespec
   ECX/RSI = NULL lub adres modyfikowalnej struktury timespec, ktora
   otrzyma resztke czasu, ktora zostala
   EAX = 0
   EAX = sygnal lub blad EINTR, EINVAL
     _________________________________________________________________

   163
   25
   Przemapuj adres wirtualny (sys_mremap)
   EBX/RDI = stary adres
   ECX/RSI = rozmiar obszaru do przemapowania
   EDX/RDX = zadany rozmiar
   ESI/R10 = zero lub flagi przemapowania
   EDI/R8 = nowy adres, jesli dano flage MREMAP_FIXED
   EAX = wskaznik do nowego obszaru
   EAX = sygnal lub blad EFAULT, EAGAIN, ENOMEM, EINVAL
     _________________________________________________________________

   164
   117
   Ustaw rozne ID uzytkownika (sys_setresuid)
   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
     _________________________________________________________________

   165
   118
   Pobierz rozne ID uzytkownika (sys_getresuid)
   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
     _________________________________________________________________

   166
   -
   Uruchom tryb wirtualny 8086 (sys_vm86)
   EBX/RDI = kod funkcji
   ECX/RSI = adres struktury vm86plus_struct
   (zalezy od numeru funkcji)
   EAX = blad EFAULT
     _________________________________________________________________

   167
   178
   Zapytaj o modul (sys_query_module)
   EBX/RDI = adres nazwy modulu lub NULL (jadro)
   ECX/RSI = numer podfunkcji
   EDX/RDX = adres bufora
   ESI/R10 = rozmiar bufora
   EDI/R8 = adres DWORDa
   EAX = 0
   EAX = blad EFAULT, ENOSPC, EINVAL, ENOENT
     _________________________________________________________________

   168
   7
   Czekaj na zdarzenia na deskryptorze (sys_poll)
   EBX/RDI = adres tablicy struktur pollfd
   ECX/RSI = liczba struktur pollfd w tablicy
   EDX/RDX = max. czas na oczekiwanie w milisekundach (-1 =
   nieskonczonosc)
   EAX = liczba odpowiednich deskryptorow
   EAX = 0, gdy czas uplynal
   EAX = blad EFAULT, EINTR, EINVAL
     _________________________________________________________________

   169
   180
   Interfejs demona NFS (sys_nfsservctl)
   EBX/RDI = komenda
   ECX/RSI = adres struktury nfsctl_arg
   EDX/RDX = adres unii union nfsctl_res
   EAX = 0
   EAX = blad
     _________________________________________________________________

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

   171
   120
   Pobierz realny, efektywny i zachowany ID grupy (sys_getresgid)
   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
     _________________________________________________________________

   172
   157
   Dzialania na procesie (sys_prctl)
   EBX/RDI = opcja
   ECX/RSI, EDX/RDX, ESI/R10, EDI/R8 = argumenty
   EAX = 0 lub 1
   EAX = blad EINVAL
     _________________________________________________________________

   173
   15
   Powrot z procedury obslugi sygnalu (sys_rt_sigreturn)
   -- funkcja wewnetrzna, nie uzywac--
   EBX/RDI = parametr zalezny od architektury
   nigdy nie powraca
     _________________________________________________________________

   174
   13
   Pobierz i zmien procedure obslugi sygnalu (sys_rt_sigaction)
   EBX/RDI = numer sygnalu
   ECX/RSI = adres struktury sigaction opisujaca biezaca procedure
   EDX/RDX = adres struktury sigaction opisujaca stara procedure
   ESI/R10 = rozmiar struktury sigset_t
   EAX = 0
   EAX=blad EINVAL, EINTR, EFAULT
     _________________________________________________________________

   175
   14
   Pobierz i zmien blokowane sygnaly (sys_rt_sigprocmask)
   EBX/RDI = dzialanie
   ECX/RSI = adres zestawu sygnalow (tablicy 32 DWORDow)
   EDX/RDX = adres zestawu sygnalow, ktory otrzyma stara maske sygnalow
   ESI/R10 = rozmiar struktury sigset_t
   EAX = 0
   EAX=blad EINVAL
     _________________________________________________________________

   176
   127
   Pobierz sygnaly oczekujace (sys_rt_sigpending)
   EBX/RDI = adres zestawu sygnalow, ktory otrzyma oczekujace sygnaly
   ECX/RSI = rozmiar struktury sigset_t
   EAX = 0
   EAX=blad EFAULT
     _________________________________________________________________

   177
   128
   Synchronicznie czekaj na zakolejkowane sygnaly (sys_rt_sigtimedwait)
   EBX/RDI = adres zestawu sygnalow, na ktore czekac
   ECX/RSI = adres struktury siginfo, ktora otrzyma informacje o sygnale
   EDX/RDX = adres struktury timespec okreslajacej czas oczekiwania
   ESI/R10 = rozmiar struktury sigset_t
   EAX = numer sygnalu
   EAX=blad EINVAL, EINTR, EAGAIN
     _________________________________________________________________

   178
   129
   Zakolejkuj sygnal dla procesu (sys_rt_sigqueueinfo)
   EBX/RDI=PID procesu, ktory ma otrzymac sygnal
   ECX/RSI=numer sygnalu
   EDX/RDX=adres struktury siginfo_t do wyslania procesowi razem z
   sygnalem
   EAX = 0
   EAX=blad EAGAIN, EINVAL, EPERM, ESRCH
     _________________________________________________________________

   179
   130
   Czekaj na sygnal (sys_rt_sigsuspend)
   EBX/RDI = adres zestawu sygnalow, na ktore czekac
   ECX/RSI = rozmiar struktury sigset_t
   EAX = -1
   EAX=blad EINTR, EFAULT
     _________________________________________________________________

   180
   17
   Czytaj z danej pozycji w pliku (sys_pread/sys_pread64)
   EBX/RDI = deskryptor otwartego pliku
   ECX/RSI = adres bufora, ktory otrzyma dane
   EDX/RDX = liczba bajtow do odczytania
   ESI/R10 = pozycja, z ktorej zaczac czytanie
   EAX = liczba przeczytanych bajtow (wskaznik pozycji w pliku pozostaje
   bez zmian)
   EAX = blad (jak w sys_read)
     _________________________________________________________________

   181
   18
   Zapisuj na danej pozycji w pliku (sys_pwrite/sys_pwrite64)
   EBX/RDI = deskryptor otwartego pliku
   ECX/RSI = adres bufora, z ktorego pobierac dane do zapisania
   EDX/RDX = liczba bajtow do zapisania
   ESI/R10 = pozycja, od ktorej zaczac zapisywanie
   EAX = liczba zapisanych bajtow (wskaznik pozycji w pliku pozostaje bez
   zmian)
   EAX = blad (jak w sys_read)
     _________________________________________________________________

   182
   92
   Zmiana wlasciciela pliku (sys_chown)
   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
     _________________________________________________________________

   183
   79
   Pobierz biezacy katalog roboczy (sys_getcwd)
   EBX/RDI = adres bufora, ktory otrzyma sciezke
   ECX/RSI = dlugosc tego bufora
   EAX = EBX/RDI
   EAX=NULL, gdy blad ERANGE, EACCES, EFAULT, EINVAL, ENOENT
     _________________________________________________________________

   184
   125
   Pobierz mozliwosci procesu (sys_capget)
   EBX/RDI = adres struktury cap_user_header_t
   ECX/RSI = adres struktury cap_user_data_t
   EAX = EBX/RDI
   EAX=NULL, gdy blad EPERM, EINVAL
     _________________________________________________________________

   185
   126
   Ustaw mozliwosci procesu (sys_capset)
   EBX/RDI = adres struktury cap_user_header_t
   ECX/RSI = adres struktury cap_user_data_t
   EAX = EBX/RDI
   EAX=NULL, gdy blad EPERM, EINVAL
     _________________________________________________________________

   186
   131
   Ustaw alternatywny stos dla procedur obslugi sygnalow
   (sys_sigaltstack)
   EBX/RDI = adres struktury stack_t, opisujacej nowy stos
   ECX/RSI = adres struktury stack_t, opisujacej stary stos; lub NULL
   (ewentualnie EDX/RDX = adres nowego wierzcholka stosu)
   EAX = 0
   EAX = blad EPERM, EINVAL, ENOMEM
     _________________________________________________________________

   187
   40
   Kopiuj dane miedzy deskryptorami plikow (sys_sendfile)
   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
     _________________________________________________________________

   188
   181
   Funkcja systemowa sys_getpmsg
   niezaimplementowane w jadrach 2.4,
   na systemach 64-bitowych zarezerwowane dla LiS/STREAMS
   zawsze EAX = ENOSYS
     _________________________________________________________________

   189
   182
   Funkcja systemowa sys_putpmsg
   niezaimplementowane w jadrach 2.4,
   na systemach 64-bitowych zarezerwowane dla LiS/STREAMS
   zawsze EAX = ENOSYS
     _________________________________________________________________

   190
   58
   Utworz proces potomny i zablokuj rodzica (sys_vfork)
   nic
   EAX = PID procesu potomnego
   EAX = blad EAGAIN, ENOMEM
     _________________________________________________________________

   191
   -
   Pobierz limity zasobow (sys_ugetrlimit)
   patrz: sys_getrlimit (?)
   EAX = 0
   EAX = blad EFAULT, EINVAL, EPERM
     _________________________________________________________________

   192
   -
   Mapuj urzadzenie lub plik do pamieci (sys_mmap2)
   EBX/RDI = proponowany adres poczatkowy
   ECX/RSI = liczba bajtow pliku do zmapowania
   EDX/RDX = ochrona
   ESI/R10 = flagi mapowania
   EDI/R8 = deskryptor mapowanego pliku, jesli mapowanie nie jest
   anonimowe
   EBP/R9 = offset poczatku mapowanych danych w pliku, liczony w
   jednostkach wielkosci strony systemowej zamiast w bajtach EAX = adres
   zmapowanego obszaru
   EAX = blad (takie same jak w sys_mmap + EFAULT)
     _________________________________________________________________

   193
   -
   Skroc plik, wersja 64-bitowa (sys_truncate64)
   EBX/RDI = adres nazwy pliku ASCIIZ
   ECX/RSI = liczba bajtow, do ktorej ma zostac skrocony plik (nizszy
   DWORD)
   EDX/RDX = liczba bajtow, do ktorej ma zostac skrocony plik (wyzszy
   DWORD)
   EAX = 0
   EAX = blad
     _________________________________________________________________

   194
   -
   Skroc plik, wersja 64-bitowa (sys_ftruncate64)
   EBX/RDI = deskryptor pliku otwartego do zapisu
   ECX/RSI = liczba bajtow, do ktorej ma zostac skrocony plik (nizszy
   DWORD)
   EDX/RDX = liczba bajtow, do ktorej ma zostac skrocony plik (wyzszy
   DWORD)
   EAX = 0
   EAX = blad
     _________________________________________________________________

   195
   -
   Pobierz status pliku, wersja 64-bitowa (sys_stat64)
   EBX/RDI = adres nazwy pliku ASCIIZ. Jesli plik jest linkiem, to
   zwracany jest status obiektu docelowego.
   ECX/RSI = adres struktury stat64
   EAX = 0
   EAX = blad
     _________________________________________________________________

   196
   -
   Pobierz status pliku, wersja 64-bitowa (sys_lstat64)
   EBX/RDI = adres nazwy pliku ASCIIZ. Jesli plik jest linkiem, to
   zwracany jest status linku, a nie obiektu docelowego.
   ECX/RSI = adres struktury stat64
   EAX = 0
   EAX = blad
     _________________________________________________________________

   197
   -
   Pobierz status pliku, wersja 64-bitowa (sys_fstat64)
   EBX/RDI = deskryptor otwartego pliku
   ECX/RSI = adres struktury stat64
   EAX = 0
   EAX = blad
     _________________________________________________________________

   198
   -
   Zmiana wlasciciela (sys_lchown32)
   EBX/RDI = adres nazwy pliku/katalogu ASCIIZ
   ECX/RSI = nowy numer uzytkownika
   EDX/RDX = nowy numer grupy
   EAX = 0
   EAX = blad EPERM, EROFS, EFAULT, ENAMETOOLONG, ENOENT, ENOMEM,
   ENOTDIR, EACCES, ELOOP i inne
     _________________________________________________________________

   199
   -
   Pobierz identyfikator uzytkownika (sys_getuid32)
   nic
   EAX = numer UID
     _________________________________________________________________

   200
   -
   Pobierz ID grupy biezacego procesu (sys_getgid32)
   nic
   EAX = ID grupy
     _________________________________________________________________

   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)
