   #Start Next Contents Funkcje x86-32: 1-50

                    Opis funkcji systemowych syscall: 0-50

   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: 0-50

   Numer/ RAX Opis Argumenty Zwraca
   0
   Czytanie z pliku (sys_read)
   RDI = deskryptor pliku
   RSI = adres bufora docelowego
   RDX = liczba bajtow do przeczytania
   RAX=liczba przeczytanych bajtow
   RAX = blad EAGAIN, EBADF, EFAULT, EINTR, EINVAL, EIO, EISDIR
     _________________________________________________________________

   1
   Zapis do pliku (sys_write)
   RDI = deskryptor pliku
   RSI = adres bufora zrodlowego
   RDX = liczba bajtow do zapisania
   RAX=liczba zapisanych bajtow
   RAX = blad EAGAIN, EBADF, EFAULT, EINTR, EINVAL, EIO, ENOSPC, EPIPE
     _________________________________________________________________

   2
   Otwarcie pliku (sys_open)
   RDI = adres nazwy pliku ASCIIZ
   RSI = bity dostepu
   RDX = prawa dostepu / tryb
   RAX=deskryptor pliku
   RAX = blad EACCES, EEXIST, EFAULT, EISDIR, ELOOP, EMFILE,
   ENAMETOOLONG, ENFILE, ENOENT, ENODEV, ENODIR, ENOMEM, ENOSPC, ENXIO,
   EROFS, ETXTBSY
     _________________________________________________________________

   3
   Zamkniecie pliku (sys_close)
   RDI = deskryptor pliku
   RAX = 0
   RAX = blad EBADF, EINTR, EIO
     _________________________________________________________________

   4
   Pobierz status pliku (sys_stat)
   RDI = adres nazwy pliku ASCIIZ. Jesli plik jest linkiem, to zwracany
   jest status obiektu docelowego.
   RSI = adres struktury stat
   RAX = 0
   RAX = blad
     _________________________________________________________________

   5
   Pobierz status pliku (sys_fstat)
   RDI = deskryptor otwartego pliku
   RSI = adres struktury stat
   RAX = 0
   RAX = blad
     _________________________________________________________________

   6
   Pobierz status pliku (sys_lstat)
   RDI = adres nazwy pliku ASCIIZ. Jesli plik jest linkiem, to zwracany
   jest status linku, a nie obiektu docelowego.
   RSI = adres struktury stat
   RAX = 0
   RAX = blad
     _________________________________________________________________

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

   8
   Zmiana biezacej pozycji w pliku (sys_lseek)
   RDI = deskryptor pliku
   RSI = liczba bajtow, o ktora chcemy sie przesunac
   RDX = odkad zaczynamy ruch
   RAX = nowa pozycja wzgledem poczatku pliku
   RAX = blad EBADF, EINVAL, EISPIPE
     _________________________________________________________________

   9
   Mapuj plik/urzadzenie do pamieci (sys_mmap)
   -- zgodne z man 2 mmap--
   RDI = proponowany adres poczatkowy
   RSI = dlugosc mapowanego obszaru
   RDX = ochrona
   R10 = flagi mapowania
   R8 = deskryptor mapowanego pliku, jesli mapowanie nie jest anonimowe
   R9 = offset poczatku mapowanych danych w pliku
   RAX = rzeczywisty adres mapowania
   RAX = blad
     _________________________________________________________________

   10
   Kontrola dostepu do obszaru pamieci (sys_mprotect)
   RDI = adres obszaru pamieci (wyrownany do granicy strony)
   RSI = dlugosc tego obszaru w bajtach (wzgledem strony pamieci)
   RDX = bity wlaczajace ochrone
   RAX=0
   RAX = blad EACCES, ENOMEM, EINVAL, EFAULT
     _________________________________________________________________

   11
   Odmapuj plik/urzadzenie z pamieci (sys_munmap)
   RDI = adres poczatkowy obszaru
   RSI = liczba bajtow
   RAX = 0
   RAX = blad
     _________________________________________________________________

   12
   Alokacja i dealokacja pamieci (sys_brk)
   RDI = 0, aby poznac aktualny najwyzszy adres sekcji .bss
   RDI = (wirtualny) adres nowego wierzcholka .bss, powyzej spodu sekcji
   danych i ponizej bibliotek
   RAX = nowy najwyzszy adres
   RAX = blad ENOMEM
     _________________________________________________________________

   13
   Pobierz i zmien procedure obslugi sygnalu (sys_rt_sigaction)
   RDI = numer sygnalu
   RSI = adres struktury sigaction opisujaca biezaca procedure
   RDX = adres struktury sigaction opisujaca stara procedure
   R10 = rozmiar struktury sigset_t
   RAX = 0
   RAX=blad EINVAL, EFAULT
     _________________________________________________________________

   14
   Pobierz i zmien blokowane sygnaly (sys_rt_sigprocmask)
   RDI = dzialanie
   RSI = adres zestawu sygnalow (tablicy 32 DWORDow)
   RDX = adres zestawu sygnalow, ktory otrzyma stara maske sygnalow
   R10 = rozmiar struktury sigset_t
   RAX = 0
   RAX=blad EINVAL, EFAULT
     _________________________________________________________________

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

   16
   Manipulacja urzadzeniem znakowym (sys_ioctl)
   RDI = deskryptor pliku
   RSI = kod komendy (man 2 ioctl_list)
   RDX = adres zapisywalnego obszaru danych lub innej struktury, zalezy
   od komendy
   RAX = 0
   RAX = blad EBADF, EFAULT, EINVAL, ENOTTY
     _________________________________________________________________

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

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

   19
   Czytaj wektor (sys_readv)
   RDI = deskryptor otwartego obiektu, z ktorego beda czytane dane
   RSI = adres tablicy struktur iovec
   RDX = liczba struktur iovec, do ktorych beda czytane dane
   RAX = 0
   RAX = blad EWOULDBLOCK, EBADF, EINTR, EINVAL, ENOLCK
     _________________________________________________________________

   20
   Zapisz wektor (sys_writev)
   RDI = deskryptor otwartego obiektu, do ktorego beda zapisane dane
   RSI = adres tablicy struktur iovec
   RDX = liczba struktur iovec, z ktorych beda czytane dane do zapisania
   RAX = 0
   RAX = blad EWOULDBLOCK, EBADF, EINTR, EINVAL, ENOLCK
     _________________________________________________________________

   21
   Sprawdz uprawnienia dostepu do pliku (sys_access)
   RDI = adres nazwy pliku ASCIIZ
   RSI = prawa dostepu / tryb (wartosci R_OK, W_OK, X_OK)
   RAX = 0
   RAX = blad - kazdy zwiazany z systemem plikow i plikami
     _________________________________________________________________

   22
   Utworz potok (sys_pipe)
   RDI = adres tablicy dwoch DWORDow
   RAX = 0 i pod [RDI]: deskryptor odczytu z potoku fd(0) pod [RDI],
   deskryptor zapisu do potoku fd(1) pod [RDI+4]
   RAX = blad EFAULT, EMFILE, ENFILE
     _________________________________________________________________

   23
   Oczekiwanie zmiany stanu deskryptora(ow) (sys_select)
   RDI = najwyzszy numer sposrod deskryptorow + 1
   RSI = adres tablicy deskryptorow sprawdzanych, czy mozna z nich czytac
   RDX = adres tablicy deskryptorow sprawdzanych, czy mozna do nich pisac
   R10 = adres tablicy deskryptorow 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 = wystapil blad
     _________________________________________________________________

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

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

   26
   Synchronizuj mapowany plik z pamiecia (sys_msync)
   RDI = adres do zrzucenia na dysk (zostana zrzucone zmodyfikowane
   strony pamieci zawierajacej ten adres i co najwyzej RSI-1 zmienionych
   nastepnych)
   RSI = liczba bajtow/rozmiar obszaru do zrzucenia na dysk
   RDX = 0 lub zORowane flagi
   RAX = 0
   RAX = blad EBUSY, EIO, ENOMEM, EINVAL, ENOLCK
     _________________________________________________________________

   27
   Pobierz informacje, czy strony pamieci sa w rdzeniu procesu
   (sys_mincore)
   RDI = adres poczatkowy sprawdzanych bajtow
   RSI = liczba sprawdzanych bajtow
   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)
   RAX = 0
   RAX = blad EAGAIN, EINVAL, EFAULT, ENOMEM
     _________________________________________________________________

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

   29
   Alokuj wspoldzielony segment pamieci (sys_shmget)
   RDI = klucz opisujacy segment pamieci
   RSI = dlugosc segmentu
   RDX = flagi shmget
   RAX = identyfikator segmentu
   RAX = blad EACCES, EEXIST, EINVAL, ENFILE, ENOENT, ENOMEM, ENOSPC,
   EPERM
     _________________________________________________________________

   30
   Podlacz wspoldzielony segment pamieci (sys_shmat)
   RDI = identyfikator segmentu pamieci
   RSI = adres podlaczenia segmentu do pamieci procesu lub 0
   RDX = flagi shmat
   RAX = adres podlaczonego segmentu
   RAX = blad EACCES, EINVAL, ENOMEM
     _________________________________________________________________

   31
   Kontrola wspoldzielonej pamieci (sys_shmctl)
   RDI = identyfikator segmentu pamieci
   RSI = rozkaz
   RDX = adres struktury shmid_ds
   RAX = wartosc odpowiednia dla rozkazu
   RAX = blad EACCES, EINVAL, EFAULT, EIDRM, ENOMEM, EOVERFLOW, EPERM
     _________________________________________________________________

   32
   Zduplikuj deskryptor pliku (sys_dup)
   RDI = stary deskryptor
   RAX = nowy deskryptor
   RAX = blad EBADF, EMFILE
     _________________________________________________________________

   33
   Zamien deskryptor zduplikowanym deskryptorem pliku (sys_dup2)
   RDI = deskryptor do zduplikowania
   RSI = deskryptor, do ktorego powinien byc przyznany duplikat
   RAX = zduplikowany deskryptor
   RAX = blad EBADF, EMFILE, EBUSY, EINTR
     _________________________________________________________________

   34
   Pauza - spij az do otrzymania sygnalu (sys_pause)
   nic
   wraca tylko po sygnale, o ile procedura jego obslugi ma powrot. RAX =
   EINTR po sygnale
     _________________________________________________________________

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

   36
   Pobierz wartosc czasomierza (sys_getitimer)
   RDI = numer czasomierza
   RSI = adres struktury itimerval, ktora otrzyma wartosc czasomierza
   RAX = 0
   RAX = blad
     _________________________________________________________________

   37
   Alarm - wyslanie sygnalu SIGALARM (sys_alarm)
   RDI = sekundy
   RAX = 0 lub liczba sekund do wykonania poprzednich alarmow
     _________________________________________________________________

   38
   Ustaw wartosc czasomierza (sys_setitimer)
   RDI = numer czasomierza
   RSI = adres struktury itimerval zawierajacej nowa wartosc czasomierza
   RSI = adres struktury itimerval, ktora otrzyma stara wartosc
   czasomierza
   RAX = 0
   RAX = blad
     _________________________________________________________________

   39
   Pobierz identyfikator biezacego procesu (sys_getpid)
   nic
   RAX = PID biezacego procesu
     _________________________________________________________________

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

   41
   Tworzenie gniazda (sys_socket)
   RDI = domena tworzonego gniazda
   RSI = typ tworzonego gniazda
   RDX = protokol dla tworzonego gniazda (zwykle 0, patrz: man 5
   protocols, man 3 getprotoent)
   RAX = deskryptor nowego gniazda
   RAX = blad EINVAL, EACCES, EAFNOSUPPORT, EMFILE, ENFILE,
   ENOBUFS/ENOMEM, EPROTONOSUPPORT
     _________________________________________________________________

   42
   Polaczenie gniazda (sys_connect)
   RDI = deskryptor gniazda
   RSI = adres struktury sockaddr (zaleznej od protokolu), opisujacej
   adres, z ktorym sie laczymy
   RDX = wielkosc struktury, na ktora wskazuje RSI
   RAX = 0
   RAX = blad EACCES, EPERM, EADDRINUSE, EAFNOSUPPORT, EAGAIN, EALREADY,
   EBADF, ECONNREFUSED, EFAULT, EINPROGRESS, EINTR, EISCONN, ENETUNREACH,
   ENOTSOCK, ETIMEDOUT
     _________________________________________________________________

   43
   Przyjmowanie polaczenia na gniezdzie (sys_accept)
   RDI = deskryptor gniazda
   RSI = adres struktury sockaddr (zaleznej od protokolu), ktora otrzyma
   adres, z ktorego polaczono sie do tego gniazda
   RDX = adres zmiennej (32-bitowej), ktora otrzyma wielkosc struktury,
   na ktora wskazuje RSI
   RAX = deskryptor gniazda do polaczonego klienta
   RAX = blad EAGAIN/EWOULDBLOCK, EBADF, ECONNABORTED, EFAULT, EINTR,
   EINVAL, EMFILE, ENFILE, ENOBUFS, ENOMEM, ENOTSOCK, EOPNOTSUPP, EPROTO,
   EPERM
     _________________________________________________________________

   44
   Wysylanie danych gniazdem (sys_sendto)
   RDI = deskryptor gniazda
   RSI = adres bufora z danymi do wyslania
   RDX = liczba bajtow z bufora do wyslania
   R10 = flagi sendto
   R8 = adres struktury sockaddr (zaleznej od protokolu), opisujacej
   adres, do ktorego wyslac dane. Ignorowane dla gniazd opartych o
   polaczenie
   R9 = wielkosc struktury, na ktora wskazuje R8. Ignorowane dla gniazd
   opartych o polaczenie
   RAX = liczba wyslanych znakow
   RAX = blad EACCES, EAGAIN, EWOULDBLOCK, EBADF, ECONNRESET,
   EDESTADDRREQ, EFAULT, EINTR, EINVAL, EISCONN, EMSGSIZE, ENOBUFS,
   ENOMEM, ENOTCONN, ENOTSOCK, EOPNOTSUPP, EPIPE
     _________________________________________________________________

   45
   Odbieranie danych gniazdem (sys_recvfrom)
   RDI = deskryptor gniazda
   RSI = adres bufora na odebrane dane
   RDX = liczba bajtow w buforze
   R10 = flagi recvfrom
   R8 = adres struktury sockaddr (zaleznej od protokolu), ktora otrzyma
   adres, z ktorego otrzymano dane. Moze byc 0.
   R9 = adres zmiennej (32-bitowej), ktora otrzyma wielkosc struktury, na
   ktora wskazuje R8. Moze byc 0.
   RAX = liczba odebranych znakow
   RAX = blad EAGAIN, EWOULDBLOCK, EBADF, ECONNREFUSED, EFAULT, EINTR,
   EINVAL, ENOMEM, ENOTCONN, ENOTSOCK
     _________________________________________________________________

   46
   Wysylanie wiadomosci gniazdem (sys_sendmsg)
   RDI = deskryptor gniazda
   RSI = adres struktury msghdr opisujacej wiadomosc
   RDX = flagi sendmsg (te same, co dla sendto)
   RAX = liczba wyslanych znakow
   RAX = blad EACCES, EAGAIN, EWOULDBLOCK, EBADF, ECONNRESET,
   EDESTADDRREQ, EFAULT, EINTR, EINVAL, EISCONN, EMSGSIZE, ENOBUFS,
   ENOMEM, ENOTCONN, ENOTSOCK, EOPNOTSUPP, EPIPE
     _________________________________________________________________

   47
   Odbieranie wiadomosci gniazdem (sys_recvmsg)
   RDI = deskryptor gniazda
   RSI = adres struktury msghdr opisujacej wiadomosc
   RDX = flagi recvmsg (te same, co dla recvfrom)
   RAX = liczba odebranych znakow
   RAX = blad EAGAIN, EWOULDBLOCK, EBADF, ECONNREFUSED, EFAULT, EINTR,
   EINVAL, ENOMEM, ENOTCONN, ENOTSOCK
     _________________________________________________________________

   48
   Zamkniecie czesci polaczenia (sys_shutdown)
   RDI = deskryptor gniazda
   RSI = sposob zamkniecia (SHUT_RD=0 blokuje odczyty, SHUT_WR=1 blokuje
   zapisy, SHUT_RDWR=2 blokuje odczyty i zapisy)
   RAX = 0
   RAX = blad EBADF, ENOTCONN, ENOTSOCK
     _________________________________________________________________

   49
   Przypisanie gniazda do adresu (sys_bind)
   RDI = deskryptor gniazda
   RSI = adres struktury sockaddr (zaleznej od protokolu), opisujacej
   adres, do ktorego chcemy przypisac gniazdo
   RDX = wielkosc struktury, na ktora wskazuje RSI
   RAX = 0
   RAX = blad EACCES, EADDRINUSE, EBADF, EINVAL, ENOTSOCK, EADDRNOTAVAIL,
   EFAULT, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, EROFS
     _________________________________________________________________

   50
   Oczekiwanie na polaczenia na gniezdzie (sys_listen)
   RDI = deskryptor gniazda
   RSI = maksymalna liczba polaczen oczekujacych
   RAX = 0
   RAX = blad EADDRINUSE, EBADF, ENOTSOCK, EOPNOTSUPP
     _________________________________________________________________

   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)
