   #Start Prev Next Contents Funkcje x86-32: 51-100

                   Opis funkcji systemowych syscall: 51-100

   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: 51-100

   Numer/ RAX Opis Argumenty Zwraca
   51
   Pobierz nazwe gniazda (sys_getsockname)
   RDI = deskryptor gniazda
   RSI = adres struktury sockaddr (zaleznej od protokolu), opisujacej
   adres, w ktorym system zwroci adres, do ktorego gniazdo jest
   przypisane
   RDX = adres zmiennej (32-bitowej), ktora otrzyma wielkosc struktury,
   na ktora wskazuje RSI
   RAX = 0
   RAX = blad EBADF, EFAULT, EINVAL, ENOBUFS, ENOTSOCK
     _________________________________________________________________

   52
   Pobierz nazwe klienta podlaczonego do gniazda (sys_getpeername)
   RDI = deskryptor gniazda
   RSI = adres struktury sockaddr (zaleznej od protokolu), opisujacej
   adres, w ktorym system zwroci adres klienta podlaczonego do tego
   gniazda
   RDX = adres zmiennej (32-bitowej), ktora otrzyma wielkosc struktury,
   na ktora wskazuje RSI
   RAX = 0
   RAX = blad EBADF, EFAULT, EINVAL, ENOBUFS, ENOTCONN, ENOTSOCK
     _________________________________________________________________

   53
   Stworz pare polaczonych gniazd (sys_socketpair)
   RDI = domena tworzonych gniazd
   RSI = typ tworzonych gniazd
   RDX = protokol dla tworzonych gniazd (zwykle 0, patrz: man 5
   protocols, man 3 getprotoent)
   R10 = adres tablicy dwoch DWORDow, w ktorych zostana umieszczone
   deskryptory nowych gniazd
   RAX = 0
   RAX = blad EAFNOSUPPORT, EFAULT, EMFILE, ENFILE, EOPNOTSUPP,
   EPROTONOSUPPORT
     _________________________________________________________________

   54
   Ustaw opcje gniazda (sys_setsockopt)
   RDI = deskryptor gniazda
   RSI = poziom, do ktorego odnosi sie opcja: SOL_SOCKET=1 dla gniazda
   lub numer protokolu (patrz: man 5 protocols, man 3 getprotoent)
   RDX = nazwa opcji (odpowiednia dla protokolu)
   R10 = adres zmiennej lub zmiennych z wartosciami opcji (odpowiednich
   dla protokolu)
   R8 = liczba wartosci opcji w zmiennej, ktorej adres jest w R10
   RAX = 0
   RAX = blad EBADF, EFAULT, EINVAL, ENOPROTOOPT, ENOTSOCK
     _________________________________________________________________

   55
   Pobierz opcje gniazda (sys_getsockopt)
   RDI = deskryptor gniazda
   RSI = poziom, do ktorego odnosi sie opcja: SOL_SOCKET=1 dla gniazda
   lub numer protokolu (patrz: man 5 protocols, man 3 getprotoent)
   RDX = nazwa opcji (odpowiednia dla protokolu)
   R10 = adres zmiennej lub zmiennych, ktore otrzymaja wartosci opcji
   R8 = liczba miejsc na wartosci opcji w zmiennej, ktorej adres jest w
   R10
   RAX = 0
   RAX = blad EBADF, EFAULT, EINVAL, ENOPROTOOPT, ENOTSOCK
     _________________________________________________________________

   56
   Utworz klon procesu (sys_clone)
   RDI = flagi klonowania
   RSI = wskaznik na oddzielny stos klona
   RDX = wskaznik na strukture pt_regs lub 0
   RAX = numer PID klona lub
   RAX = blad EAGAIN, ENOMEM, EINVAL, EPERM
     _________________________________________________________________

   57
   Uruchomienie nowego procesu (sys_fork)
   RDI = adres struktury pt_regs
   RAX = id procesu potomnego (PID)
   RAX=blad EAGAIN, ENOMEM
     _________________________________________________________________

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

   59
   Uruchomienie innego programu (sys_execve)
   RDI=adres nazwy (ze sciezka) programu ASCIIZ
   RSI = adres zakonczonej dwordem 0 listy adresow argumentow
   uruchamianego programu ASCIIZ
   RDX = adres zakonczonej dwordem 0 listy adresow zmiennych srodowiska
   dla uruchamianego programu ASCIIZ
   nie wraca do programu wywolujacego
   RAX = blad E2BIG, EACCES, EINVAL, EOIO, EISDIR, ELIBBAD, ELOOP,
   ENFILE, ENOEXEC, ENOENT, ENOMEM, ENOTDIR, EFAULT, ENAMETOOLONG, EPERM,
   ETXTBUSY
     _________________________________________________________________

   60
   Wyjscie z programu (sys_exit)
   RDI = kod wyjscia (errorlevel)
   nie wraca do programu wywolujacego
     _________________________________________________________________

   61
   Czekaj na zakonczenie procesu (sys_wait4)
   RDI = PID procesu potomnego lub specyfikacja
   RSI = NULL lub adres zmiennej DWORD, ktora otrzyma status
   RDX = opcje
   R10 = adres struktury rusage
   RAX = PID zakonczonego procesu
   RAX = blad
   RAX = 0 dla WNOHANG
     _________________________________________________________________

   62
   Wyslij sygnal do procesu (sys_kill)
   RDI = numer PID procesu (patrz tez specyfikacja)
   RSI = numer sygnalu
   RAX = 0
   RAX = blad EINVAL, EPERM, ESRCH
     _________________________________________________________________

   63
   Pobierz informacje o jadrze (sys_uname)
   RDI = adres struktury utsname
   RAX = 0
   RAX = blad EINVAL, EPERM, EFAULT
     _________________________________________________________________

   64
   Pobierz identyfikator zbioru semaforow (sys_semget)
   RDI = klucz identyfikujacy
   RSI = liczba semaforow do utworzenia, gdy klucz ma wartosc
   IPC_PRIVATE=20 lub gdy nie ma jeszcze semaforow powiazanych z tym
   kluczem, a flagi zawieraja IPC_CREAT
   RDX = flagi: 0 lub zORowane wartosci IPC_CREAT=00001000 (osemkowo) i
   IPC_EXCL=02000 (osemkowo), a dodatkowo przy tworzeniu semaforow, 9
   najmlodszych bitow to uprawnienia (takie same, jak w funkcji open)
   RAX = identyfikator zestawu semaforow
   RAX = blad EACCES, EEXIST, EINVAL, ENOENT, ENOMEM, ENOSPC
     _________________________________________________________________

   65
   Operacje na semaforze (sys_semop)
   RDI = identyfikator zestawu semaforow
   RSI = adres tablicy struktur sembuf
   RDX = liczba elementow w tablicy spod RSI
   RAX = 0
   RAX = blad E2BIG, EACCES, EAGAIN, EFAULT, EFBIG, EIDRM, EINTR, EINVAL,
   ENOMEM, ERANGE
     _________________________________________________________________

   66
   Kontrola semaforu (sys_semctl)
   RDI = identyfikator zestawu semaforow
   RSI = numer semafora
   RDX = komenda dla semaforow
   R10 = unia semun (przekazywany jest jeden z elementow)
   RAX = wynik komendy
   RAX = blad EACCES, EFAULT, EIDRM, EINVAL, EPERM, ERANGE
     _________________________________________________________________

   67
   Odlacz wspoldzielony segment pamieci (sys_shmdt)
   RDI = adres wspoldzielonego obszaru pamieci (zwrocony przez shmat)
   RAX = 0
   RAX = blad EINVAL
     _________________________________________________________________

   68
   Pobierz identyfikator kolejki wiadomosci (sys_msgget)
   RDI = klucz identyfikujacy. Tworzona jest nowa kolejka gdy klucz ma
   wartosc IPC_PRIVATE=20 lub gdy nie ma jeszcze kolejki powiazanej z tym
   kluczem a flagi zawieraja IPC_CREAT
   RSI = flagi: 0 lub zORowane wartosci IPC_CREAT=00001000 (osemkowo) i
   IPC_EXCL=02000 (osemkowo), a dodatkowo przy tworzeniu kolejki, 9
   najmlodszych bitow to uprawnienia (takie same, jak w funkcji open)
   RAX = identyfikator kolejki wiadomosci
   RAX = blad EACCES, EEXIST, ENOENT, ENOMEM, ENOSPC
     _________________________________________________________________

   69
   Wyslij wiadomosc do kolejki wiadomosci (sys_msgsnd)
   RDI = identyfikator kolejki wiadomosci
   RSI = adres struktury z wiadomoscia do wyslania
   RDX = liczba bajtow do wyslania
   R10 = flagi: 0 lub IPC_NOWAIT=04000 (osemkowo)
   RAX = 0
   RAX = blad EACCES, EAGAIN, EFAULT, EIDRM, EINTR, EINVAL, ENOMEM
     _________________________________________________________________

   70
   Odbierz wiadomosc z kolejki wiadomosci (sys_msgrcv)
   RDI = identyfikator kolejki wiadomosci
   RSI = adres struktury wiadomosci, ktora otrzyma odebrana wiadomosc
   RDX = maksymalna liczba bajtow do odebrania
   R10 = typ wiadomosci (0 oznacza pierwsza, R10 > 0 oznacza pierwsza
   tego typu, R10 < 0 oznacza pierwsza o typie niewiekszym od
   bezwzglednej wartosci R10)
   R8 = flagi msgrcv
   RAX = liczba bajtow zapisanych do bufora
   RAX = blad E2BIG, EACCES, EAGAIN, EFAULT, EIDRM, EINTR, EINVAL, ENOMSG
     _________________________________________________________________

   71
   Kontrola kolejki wiadomosci (sys_msgctl)
   RDI = identyfikator kolejki wiadomosci
   RSI = komenda
   RDX = adres struktury msqid_ds
   RAX = wynik komendy
   RAX = blad EACCES, EFAULT, EIDRM, EINVAL, EPERM
     _________________________________________________________________

   72
   Kontrola nad deskryptorem pliku (sys_fcntl)
   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
     _________________________________________________________________

   73
   Zmien blokowanie plikow (sys_flock)
   RDI = deskryptor otwartego pliku
   RSI = operacja do wykonania
   RAX = 0
   RAX = blad EWOULDBLOCK, EBADF, EINTR, EINVAL, ENOLCK
     _________________________________________________________________

   74
   Zapisz pamiec podreczna na dysk (sys_fsync)
   RDI = deskryptor pliku, ktory ma byc zsynchronizowany na dysk
   RAX = 0
   RAX = blad
     _________________________________________________________________

   75
   Zapisz bufory danych pliku na dysk (sys_fdatasync)
   RDI = deskryptor pliku, ktorego DANE beda zsynchronizowane (ale na
   przyklad czas dostepu nie bedzie zmieniony)
   RAX = 0
   RAX = blad EBADF, EIO, EROFS
     _________________________________________________________________

   76
   Skroc plik (sys_truncate)
   RDI = adres nazwy pliku ASCIIZ
   RSI = liczba bajtow, do ktorej ma zostac skrocony plik
   RAX = 0
   RAX = blad
     _________________________________________________________________

   77
   Skroc plik (sys_ftruncate)
   RDI = deskryptor pliku otwartego do zapisu
   RSI = liczba bajtow, do ktorej ma zostac skrocony plik
   RAX = 0
   RAX = blad
     _________________________________________________________________

   78
   Pobierz wpisy o katalogach (sys_getdents)
   RDI = deskryptor otwartego katalogu
   RSI = adres obszaru pamieci na struktury dirent
   RDX = rozmiar obszaru pamieci pod [RSI]
   RAX = 0
   RAX = blad EBADF, EFAULT, EINVAL, ENOENT, ENOTDIR
     _________________________________________________________________

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

   80
   Zmiana katalogu (sys_chdir)
   RDI = adres nazwy nowego katalogu ASCIIZ
   RAX = 0
   RAX = blad EACCES, EBADF, EFAULT, EIO, ELOOP, ENAMETOOLONG, ENOENT,
   ENOMEM, ENOTDIR
     _________________________________________________________________

   81
   Zmien katalog roboczy (sys_fchdir)
   RDI = deskryptor otwartego katalogu
   RAX = 0
   RAX = blad EBADF, EACCES i inne
     _________________________________________________________________

   82
   Przenies plik/Zmien nazwe pliku (sys_rename)
   RDI=adres starej nazwy (i ewentualnie sciezki) ASCIIZ
   RSI=adres nowej nazwy (i ewentualnie sciezki) ASCIIZ
   RAX = 0
   RAX = blad EBUSY, EEXIST, EISDIR, ENOTEMPTY, EXDEV (i inne bledy
   systemu plikow)
     _________________________________________________________________

   83
   Utworz katalog (sys_mkdir)
   RDI = adres sciezki/nazwy ASCIIZ
   RSI = prawa dostepu / tryb
   RAX = 0
   RAX = blad - kazdy zwiazany z systemem plikow lub prawami dostepu
     _________________________________________________________________

   84
   Usun katalog (sys_rmdir)
   RDI = adres sciezki/nazwy ASCIIZ
   RAX = 0
   RAX = blad EACCES, EBUSY, EFAULT, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM,
   ENOTDIR, ENOTEMPTY, EPERM, EROFS
     _________________________________________________________________

   85
   Utworzenie pliku (sys_creat, nie create!)
   RDI = adres nazwy pliku ASCIIZ
   RSI = prawa dostepu / tryb
   RAX = deskryptor pliku
   RAX = blad EACCES, EEXIST, EFAULT, EISDIR, ELOOP, EMFILE,
   ENAMETOOLONG, ENFILE, ENOENT, ENODEV, ENODIR, ENOMEM, ENOSPC, ENXIO,
   EROFS, ETXTBSY
     _________________________________________________________________

   86
   Utworzenie twardego dowiazania do pliku (sys_link)
   RDI = adres nazwy istniejacego pliku ASCIIZ
   RSI = adres nazwy nowego pliku ASCIIZ
   RAX = 0
   RAX=blad EACCES, EIO, EPERM, EEXIST, EFAULT, ELOOP, EMLINK,
   ENAMETOOLONG, ENOENT, ENOMEM, ENOSPC, ENOTDIR, EROFS, EXDEV
     _________________________________________________________________

   87
   Usuniecie pliku (sys_unlink)
   RDI = adres nazwy pliku ASCIIZ
   RAX = 0
   RAX=blad EACCES, EFAULT, EIO, EISDIR, ELOOP, ENOENT, ENAMETOOLONG,
   ENOMEM, ENOTDIR, EPERM, EROFS
     _________________________________________________________________

   88
   Stworz dowiazanie symboliczne do pliku (sys_symlink)
   RDI = adres nazwy pliku ASCIIZ
   RSI = adres nazwe linku ASCIIZ
   RAX = 0
   RAX = bledy zwiazane z uprawnieniami lub systemem plikow
     _________________________________________________________________

   89
   Przeczytaj zawartosc linku symbolicznego (sys_readlink)
   RDI = adres nazwy dowiazania symbolicznego ASCIIZ
   RSI = adres bufora, ktory otrzyma przeczytana informacje
   RDX = dlugosc bufora
   RAX = liczba przeczytanych znakow
   RAX = blad
     _________________________________________________________________

   90
   Zmiana uprawnien (sys_chmod)
   RDI = adres nazwy pliku/katalogu ASCIIZ
   RSI = nowe prawa dostepu
   RAX = 0
   RAX = blad EACCES, EBADF, EFAULT, EIO, ELOOP, ENAMETOOLONG, ENOENT,
   ENOMEM, ENOTDIR, EPERM, EROFS
     _________________________________________________________________

   91
   Zmiana uprawnien (sys_fchmod)
   RDI = deskryptor otwartego pliku
   RSI = nowe prawa dostepu
   RAX = 0
   RAX = blad
     _________________________________________________________________

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

   93
   Zmiana wlasciciela (sys_fchown)
   RDI = deskryptor otwartego pliku
   RSI = nowy numer uzytkownika
   RDX = nowy numer grupy
   RAX = 0
   RAX = blad
     _________________________________________________________________

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

   95
   Ustaw maske uprawnien przy tworzeniu plikow (sys_umask)
   RDI = maska, patrz prawa dostepu / tryb
   Gdy tworzymy plik o uprawnieniach X, naprawde ma on uprawnienia X AND
   (NOT umask)
   RAX = poprzednia umask
     _________________________________________________________________

   96
   Pobierz czas (sys_gettimeofday)
   RDI = adres struktury timeval
   RSI = adres struktury timezone
   RAX = 0 i wynik zapisany w strukturach
   RAX = blad EFAULT, EINVAL, EPERM
     _________________________________________________________________

   97
   Pobierz limity zasobow (sys_getrlimit)
   RDI = numer zasobu
   RSI = adres struktury rlimit
   RAX = 0
   RAX = blad EFAULT, EINVAL, EPERM
     _________________________________________________________________

   98
   Pobierz zuzycie zasobow (sys_getrusage)
   RDI = numer uzytkownika (who)
   RSI = adres struktury rusage
   RAX = 0
   RAX = blad EFAULT, EINVAL, EPERM
     _________________________________________________________________

   99
   Pobierz statystyki systemowe (sys_sysinfo)
   RDI = adres struktury sysinfo
   RAX = 0
   RAX = blad
     _________________________________________________________________

   100
   Pobierz czasy procesow (sys_times)
   RDI = adres struktury tms
   RAX = liczba taktow zegara
   EAX = blad
     _________________________________________________________________

   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)
