   #Start Prev Contents

                       Opis funkcji systemowych syscall

   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).

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

   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: funkcje bez numerow

   Numer/ RAX Opis Argumenty Zwraca
   -
   Czekaj na zmiane stanu innego procesu (sys_waitpid)
   RDI = id procesu / specyfikacja
   RSI = NULL lub adres zmiennej DWORD, ktora otrzyma status
   RDX = opcje
   RAX=PID zakonczonego procesu
   [RSI] = (jesli podano adres bufora) stan wyjscia procesu
   RAX = blad ECHILD, EINVAL, ERESTARTSYS
     _________________________________________________________________

   -
   Funkcja systemowa sys_break
   (porzucone)
   Istnieje tylko dla zachowania zgodnosci
   RAX = blad ENOSYS
     _________________________________________________________________

   -
   Funkcja systemowa sys_oldstat
   (porzucone)


     _________________________________________________________________

   -
   Odmontowanie systemu plikow (sys_umount)
   RDI = adres nazwy pliku specjalnego lub katalogu (zamontowanego)
   nic
   RAX = blad - kazdy, ktory moze sie zdarzyc w systemie plikow lub
   jadrze
     _________________________________________________________________

   -
   Ustaw czas systemowy (sys_stime)
   RDI = nowy czas jako liczba sekund, ktore uplynely od 1 Stycznia 1970
   nic
   RAX = blad EPERM
     _________________________________________________________________

   -
   Funkcja systemowa sys_oldfstat
   (porzucone)


     _________________________________________________________________

   -
   Funkcja systemowa sys_stty
   (porzucone)
   --nieuzywane od 2.0--
   zawsze RAX = -1
     _________________________________________________________________

   -
   Funkcja systemowa sys_gtty
   (porzucone)
   --nieuzywane od 2.0--
   zawsze RAX = -1
     _________________________________________________________________

   -
   Zmien priorytet procesu (sys_nice)
   RDI = liczba, o ktora zwiekszyc numer priorytetu (czyli zmniejszyc sam
   priorytet)
   nic
   RAX = blad EPERM
     _________________________________________________________________

   -
   Pobierz biezaca date i czas - sys_ftime
   (przestarzale)
   --zamiast tego, uzywaj time, gettimeofday--
   RDI = adres struktury timeb
   zawsze RAX = 0
     _________________________________________________________________

   -
   Funkcja systemowa sys_prof
   (porzucone)
   niezaimplementowane w jadrach 2.4
   zawsze RAX = -1, blad ENOSYS
     _________________________________________________________________

   -
   Ustaw procedure obslugi sygnalu (sys_signal)
   RDI = numer sygnalu
   RSI = adres procedury przyjmujacej int i zwracajaca void (nic) lub
   wartosc SIG_IGN=1 (ignoruj sygnal) lub SIG_DFL=0 (resetuj sygnal na
   domyslne zachowanie)
   RAX = adres poprzedniej procedury obslugi
   RAX = blad SIG_ERR
     _________________________________________________________________

   -
   Funkcja systemowa sys_lock (porzucone)
   --nieuzywane od 2.0--
   zawsze RAX = -1
     _________________________________________________________________

   -
   Funkcja systemowa sys_mpx (porzucone)
   --nieuzywane od 2.0--
   zawsze RAX = -1
     _________________________________________________________________

   -
   Pobierz/ustaw limity zasobow (sys_ulimit)
   --nieuzywane (zamiast tego uzywaj getrlimit, setrlimit, sysconf)--
   man 3 ulimit
   RDI = komenda, patrz: sys_ulimit
   RSI = nowy limit
   RAX = aktualny limit
   RAX = -1, gdy blad
     _________________________________________________________________

   -
   Funkcja systemowa sys_oldolduname (porzucone)


     _________________________________________________________________

   -
   Pobierz/ustal procedure obslugi sygnalu (sys_sigaction)
   RDI = numer sygnalu
   RSI = adres struktury sigaction opisujaca biezaca procedure
   RDX = adres struktury sigaction opisujaca stara procedure
   nic
   RAX=blad EINVAL, EINTR, EFAULT
     _________________________________________________________________

   -
   Pobierz maske sygnalow procesu (sys_sgetmask)
   --przestarzale (zamiast tego uzywaj sys_sigprocmask)--
   RAX = maska sygnalow biezacego procesu
     _________________________________________________________________

   -
   Ustaw maske sygnalow procesu (sys_ssetmask)
   --przestarzale (zamiast tego uzywaj sys_sigprocmask)--
   RDI = nowa maska sygnalow procesu
   RAX = poprzednia maska sygnalow
     _________________________________________________________________

   -
   Zastapienie dla sigpause - sys_sigsuspend
   RDI = adres nowej maski sygnalowej procesu - struktury sigset_t
   RAX = 0
   RAX = -1, gdy blad
     _________________________________________________________________

   -
   Pobierz trwajace blokujace sygnaly (sys_sigpending)
   RDI = adres maski sygnalow - struktury sigset_t
   RAX = 0
   RAX = -1, gdy blad
     _________________________________________________________________

   -
   Czytaj katalog (sys_readdir)
   RDI = deskryptor otwartego katalogu
   RSI = adres struktury dirent
   RDX = liczba struktur do odczytania (ignorowane, czytana jest 1
   struktura)
   RAX = 1
   RAX = 0 na koncu katalogu
   RAX = -1, gdy blad
     _________________________________________________________________

   -
   Profilowanie czasu wykonywania (sys_profil)
   --man 3 profil--
   RDI = adres tablicy WORDow
   RSI = dlugosc tej tablicy, na ktora pokazuje RDI
   RDX = offset poczatkowy
   R10 = mnoznik
   zawsze RAX = 0
     _________________________________________________________________

   -
   Funkcja systemowa sys_olduname (porzucone)


     _________________________________________________________________

   -
   Spowoduj bezczynnosc procesu 0 (sys_idle)
   nic
   dla procesu nr 0 nigdy nie wraca.
   Dla pozostalych zwraca RAX = -1 (EPERM)
     _________________________________________________________________

   -
   Przejdz w tryb wirtualny 8086 (sys_vm86old)
   --to bylo przed jadrem 2.0.38--
   RDI = adres struktury vm86_struct
   RAX = 0
   RAX = -1, gdy blad
     _________________________________________________________________

   -
   Komunikacja miedzyprocesowa SysV (sys_ipc)
   RDI = numer wywolywanej funkcji
   RSI, RDX, R10 = parametry 1-3 wywolywanej funkcji
   R8 = adres dalszych parametrow, jesli trzeba
   R9 = parametr piaty
   zalezy od wywolywanej funkcji
     _________________________________________________________________

   -
   Powrot z procedury obslugi sygnalu (sys_sigreturn)
   RDI = argument zalezny od architektury, uzywany przez jadro
   nigdy nie powraca
     _________________________________________________________________

   -
   Zmiana listy blokowanych sygnalow (sys_sigprocmask)
   RDI = co zrobic
   RSI = adres struktury sigset_t
   RDX = adres struktury sigset_t (do przechowania starej maski) lub 0
   RAX = 0
   RAX = -1, gdy blad EINVAL, EPERM, EFAULT
     _________________________________________________________________

   -
   Demon wyprozniania buforow (sys_bdflush)
   RDI = komenda demona
   RSI = dodatkowy parametr, zalezny od komendy
   RAX=0, gdy sukces i RDI>0
   RAX = -1, gdy blad EPERM, EFAULT, EBUSY, EINVAL
     _________________________________________________________________

   -
   Zmiana biezacej pozycji w duzym pliku (sys_llseek)
   RDI = deskryptor otwartego pliku
   ECX:RSI = liczba bajtow, o ktora chcemy sie przesunac
   RDX = adres QWORDa, ktory otrzyma nowa pozycje w pliku (big endian?)
   R10 = odkad zaczynamy ruch
   RAX = 0
   RAX = blad EBADF, EINVAL
     _________________________________________________________________

   -
   Oczekiwanie zmiany stanu deskryptora(ow) (sys_newselect)
   RDI = najwyzszy numer sposrod deskryptorow + 1 (co najwyzej FILE_MAX)
   RSI = adres tablicy deskryptorow (lub 0) sprawdzanych, czy mozna z
   nich czytac
   RDX = adres tablicy deskryptorow (lub 0) sprawdzanych, czy mozna do
   nich pisac
   R10 = adres tablicy deskryptorow (lub 0) sprawdzanych, czy nie
   wystapil u nich wyjatek
   R8 = adres struktury timeval zawierajaca maksymalny czas oczekiwania
   RAX = calkowita liczba deskryptorow, ktora pozostala w tablicach
   RAX = 0, gdy skonczyl sie czas
   RAX = -1, gdy wystapil blad EBADF, EINVAL, ENOMEM, EINTR
     _________________________________________________________________

   -
   Uruchom tryb wirtualny 8086 (sys_vm86)
   RDI = kod funkcji
   RSI = adres struktury vm86plus_struct
   (zalezy od numeru funkcji)
   RAX = -1, gdy blad EFAULT
     _________________________________________________________________

   -
   Pobierz limity zasobow (sys_ugetrlimit)
   patrz: sys_getrlimit (?)
   nic
   RAX = blad EFAULT, EINVAL, EPERM
     _________________________________________________________________

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

   -
   Skroc plik, wersja 64-bitowa (sys_truncate64)
   RDI = adres nazwy pliku ASCIIZ
   RSI = liczba bajtow, do ktorej ma zostac skrocony plik (nizszy DWORD)
   RDX = liczba bajtow, do ktorej ma zostac skrocony plik (wyzszy DWORD)
   RAX = 0
   RAX = -1, gdy blad
     _________________________________________________________________

   -
   Skroc plik, wersja 64-bitowa (sys_ftruncate64)
   RDI = deskryptor pliku otwartego do zapisu
   RSI = liczba bajtow, do ktorej ma zostac skrocony plik (nizszy DWORD)
   RDX = liczba bajtow, do ktorej ma zostac skrocony plik (wyzszy DWORD)
   RAX = 0
   RAX = -1, gdy blad
     _________________________________________________________________

   -
   Pobierz status pliku, wersja 64-bitowa (sys_stat64)
   RDI = adres nazwy pliku ASCIIZ. Jesli plik jest linkiem, to zwracany
   jest status obiektu docelowego.
   RSI = adres struktury stat64
   RAX = 0
   RAX = -1, gdy blad
     _________________________________________________________________

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

   -
   Pobierz status pliku, wersja 64-bitowa (sys_fstat64)
   RDI = deskryptor otwartego pliku
   RSI = adres struktury stat64
   RAX = 0
   RAX = -1, gdy blad
     _________________________________________________________________

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

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

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

   -
   Pobierz efektywne ID uzytkownika biezacego procesu (sys_geteuid32)
   nic
   RAX = efektywny UID
     _________________________________________________________________

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

   -
   Ustaw realny i efektywny ID uzytkownika (sys_setreuid32)
   RDI = realny ID uzytkownika (UID)
   RSI = efektywny UID
   nic
   RAX = blad EPERM
     _________________________________________________________________

   -
   Ustaw realny i efektywny ID grupy (sys_setregid32)
   RDI = realny ID grupy (GID)
   RSI = efektywny GID
   nic
   RAX = blad EPERM
     _________________________________________________________________

   -
   Pobierz liczbe dodatkowych grup (sys_getgroups32)
   RDI = rozmiar tablicy z RSI
   RSI = adres tablicy, gdzie zostana zapisane GID-y (DWORDY) grup
   dodatkowych
   RAX = liczba dodatkowych grup procesu
   RAX = -1 oznacza blad (EFAULT, EINVAL, EPERM)
     _________________________________________________________________

   -
   Ustaw liczbe dodatkowych grup (sys_setgroups32)
   RDI = rozmiar tablicy z RSI
   RSI = adres tablicy, gdzie zawierajaca GID-y (DWORDY)
   RAX = 0
   RAX = -1 oznacza blad (EFAULT, EINVAL, EPERM)
     _________________________________________________________________

   -
   Zmiana wlasciciela (sys_fchown32)
   RDI = deskryptor otwartego pliku
   RSI = nowy numer uzytkownika
   RDX = nowy numer grupy
   RAX = 0
   RAX = -1, gdy blad
     _________________________________________________________________

   -
   Ustaw rozne ID uzytkownika (sys_setresuid32)
   RDI = realny UID lub -1 (wtedy jest bez zmian)
   RSI = efektywny UID lub -1 (bez zmian)
   RDX = zachowany (saved) UID lub -1 (bez zmian)
   RAX = 0
   RAX = -1, gdy blad EPERM
     _________________________________________________________________

   -
   Pobierz rozne ID uzytkownika (sys_getresuid32)
   RDI = adres DWORDa, ktory otrzyma realny UID
   RSI = adres DWORDa, ktory otrzyma efektywny UID
   RDX = adres DWORDa, ktory otrzyma zachowany UID
   RAX = 0
   RAX = -1, gdy blad EFAULT
     _________________________________________________________________

   -
   Ustaw realny, efektywny i zachowany ID grupy (sys_setresgid32)
   RDI = realny GID
   RSI = efektywny GID
   RDX = zachowany (saved) GID
   RAX = 0
   RAX = -1, gdy blad EPERM
     _________________________________________________________________

   -
   Pobierz realny, efektywny i zachowany ID grupy (sys_getresgid32)
   RDI = adres DWORDa, ktory otrzyma realny GID
   RSI = adres DWORDa, ktory otrzyma efektywny GID
   RDX = adres DWORDa, ktory otrzyma zachowany (saved) GID
   RAX = 0
   RAX = -1, gdy blad EFAULT
     _________________________________________________________________

   -
   Zmiana wlasciciela pliku (sys_chown32)
   RDI=adres sciezki do pliku
   RSI = UID nowego wlasciciela
   RDX = GID nowej grupy
   RAX = 0
   RAX = -1, gdy blad na przyklad EPERM, EROFS, EFAULT, ENOENT,
   ENAMETOOLONG, ENOMEM, ENOTDIR, EACCES, ELOOP
     _________________________________________________________________

   -
   Ustaw identyfikator uzytkownika (sys_setuid32)
   RDI = nowy UID
   nic
   RAX = blad EPERM
     _________________________________________________________________

   -
   Ustaw ID grupy biezacego procesu (sys_setgid32)
   RDI = nowy ID grupy
   nic
   RAX = blad EPERM
     _________________________________________________________________

   -
   Ustal UID przy sprawdzaniu systemow plikow (sys_setfsuid32)
   RDI = nowy ID uzytkownika
   RAX = stary UID (zawsze)
     _________________________________________________________________

   -
   Ustal GID przy sprawdzaniu systemow plikow (sys_setfsgid32)
   RDI = nowy ID grupy
   RAX = stary GID (zawsze)
     _________________________________________________________________

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

   -
   brak danych
   -
   -
     _________________________________________________________________

   -
   Funkcja systemowa sys_alloc_hugepages
   zaimplementowane tylko w jadrach 2.5.36 - 2.5.54, wiec nie bede
   omawial
   zawsze RAX = -1, blad ENOSYS
     _________________________________________________________________

   -
   Funkcja systemowa sys_free_hugepages
   zaimplementowane tylko w jadrach 2.5.36 - 2.5.54, wiec nie bede
   omawial
   zawsze RAX = -1, blad ENOSYS
     _________________________________________________________________

   -
   Pobierz statystyki systemu plikow, wersja 64-bitowa (sys_statfs64)
   RDI = adres nazwy dowolnego pliku w zamontowanym systemie plikow
   RSI adres struktury statfs64
   RAX = 0
   RAX = -1, gdy blad
     _________________________________________________________________

   -
   Pobierz statystyki systemu plikow, wersja 64-bitowa (sys_fstatfs64)
   RDI = deskryptor dowolnego otwartego pliku w zamontowanym systemie
   plikow
   RSI = adres struktury statfs64
   RAX = 0
   RAX = -1, gdy blad
     _________________________________________________________________

   -
   sys_setaltroot
   nieuzywane
   brak danych
     _________________________________________________________________

   -
   Funkcja systemowa sys_oldlstat (porzucone)


     _________________________________________________________________

   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)
