   #Start Prev Next Contents Funkcje x86-64: 101-150

                   Opis funkcji przerwania int 80h: 101-150

   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: 101-150

   Numer/ EAX x86-64 RAX Opis Argumenty Zwraca
   101
   173
   Zmien prawa dostepu do portow (sys_ioperm)
   EBX/RDI = poczatkowy numer portu
   ECX/RSI = liczba bajtow, ktore bedzie mozna wyslac/odebrac
   EDX/RDX = koncowy numer portu
   EAX = 0
   EAX = blad
     _________________________________________________________________

   102
   41
   Funkcje gniazd (sys_socketcall)
   EBX/RDI = numer funkcji do uruchomienia
   ECX/RSI = adres argumentow
   EAX = wartosc zwrocona przez zadana funkcje?
     _________________________________________________________________

   103
   103
   Opcje logowania (sys_syslog)
   EBX/RDI = komenda syslog
   ECX/RSI = adres bufora znakowego
   EDX/RDX = liczba bajtow (patrz opis EBX/RDI)
   EAX = liczba bajtow (patrz opis EBX/RDI) lub 0
   EAX = blad EINVAL, EPERM, ERESTARTSYS, ENOSYS
     _________________________________________________________________

   104
   38
   Ustaw wartosc czasomierza (sys_setitimer)
   EBX/RDI = numer czasomierza
   ECX/RSI = adres struktury itimerval zawierajacej nowa wartosc
   czasomierza
   ECX/RSI = adres struktury itimerval, ktora otrzyma stara wartosc
   czasomierza
   EAX = 0
   EAX = blad
     _________________________________________________________________

   105
   36
   Pobierz wartosc czasomierza (sys_getitimer)
   EBX/RDI = numer czasomierza
   ECX/RSI = adres struktury itimerval, ktora otrzyma wartosc czasomierza
   EAX = 0
   EAX = blad
     _________________________________________________________________

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

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

   108
   5
   Pobierz status pliku (sys_fstat)
   EBX/RDI = deskryptor otwartego pliku
   ECX/RSI = adres struktury stat
   EAX = 0
   EAX = blad
     _________________________________________________________________

   109
   -
   Funkcja systemowa sys_olduname (porzucone)


     _________________________________________________________________

   110
   172
   Ustaw prawa dostepu do wszystkich portow (sys_iopl)
   EBX/RDI = poziom IOPL od 0 (normalny proces) do 3
   EAX = 0
   EAX = blad
     _________________________________________________________________

   111
   153
   Wirtualnie odlacz biezacy terminal (sys_vhangup)
   nic
   EAX = 0
   EAX = blad EPERM
     _________________________________________________________________

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

   113
   -
   Przejdz w tryb wirtualny 8086 (sys_vm86old)
   --to bylo przed jadrem 2.0.38--
   EBX/RDI = adres struktury vm86_struct
   EAX = 0
   EAX = blad
     _________________________________________________________________

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

   115
   168
   Wylaczenie pliku wymiany (sys_swapoff)
   EBX/RDI = adres sciezki i nazwy pliku/urzadzenia swap
   EAX = 0
   EAX = blad
     _________________________________________________________________

   116
   99
   Pobierz statystyki systemowe (sys_sysinfo)
   EBX/RDI = adres struktury sysinfo
   EAX = 0
   EAX = blad
     _________________________________________________________________

   117
   -
   Komunikacja miedzyprocesowa SysV (sys_ipc)
   EBX/RDI = numer wywolywanej funkcji
   ECX/RSI, EDX/RDX, ESI/R10 = parametry 1-3 wywolywanej funkcji
   EDI/R8 = adres dalszych parametrow, jesli trzeba
   EBP/R9 = parametr piaty
   zalezy od wywolywanej funkcji
     _________________________________________________________________

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

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

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

   121
   171
   Ustal nazwe domeny (sys_setdomainname)
   EBX/RDI = adres lancucha znakow, zawierajacego domene
   ECX/RSI = dlugosc tego lancucha znakow
   EAX = 0
   EAX = blad EINVAL, EPERM, EFAULT
     _________________________________________________________________

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

   123
   154
   Zmien tablice LDT (sys_modify_ldt)
   EBX/RDI = numer funkcji
   ECX/RSI = adres miejsca na przechowanie danych
   EDX/RDX = liczba bajtow obszaru pod [ECX/RSI]
   EAX = liczba przeczytanych bajtow lub 0 (gdy zapisywano)
   EAX = blad EINVAL, ENOSYS, EFAULT
     _________________________________________________________________

   124
   159
   Dopasowanie zegara w jadrze (sys_adjtimex)
   EBX/RDI = adres struktury timex
   EAX = stan zegara (patrz timex)
   EAX = blad EINVAL, EPERM, EFAULT
     _________________________________________________________________

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

   126
   -
   Zmiana listy blokowanych sygnalow (sys_sigprocmask)
   EBX/RDI = co zrobic
   ECX/RSI = adres struktury sigset_t
   EDX/RDX = adres struktury sigset_t (do przechowania starej maski) lub
   0
   EAX = 0
   EAX = blad EINVAL, EPERM, EFAULT
     _________________________________________________________________

   127
   174
   Utworz wpis ladowalnego modulu jadra (sys_create_module)
   EBX/RDI = adres nazwy modulu
   ECX/RSI = dlugosc nazwy
   EAX = adres modulu w jadrze
   EAX = blad EINVAL, EPERM, EFAULT, EEXIST, ENOMEM
     _________________________________________________________________

   128
   175
   Inicjalizacja modulu jadra (sys_init_module)
   EBX/RDI = adres nazwy modulu
   ECX/RSI = adres struktury module
   EAX = 0
   EAX = blad EINVAL, EPERM, EFAULT, ENOENT, EBUSY
     _________________________________________________________________

   129
   176
   Usun wpis nieuzywanego modulu jadra (sys_delete_module)
   EBX/RDI = adres nazwy modulu (0 oznacza usuniecie wpisow wszystkich
   nieuzywanych modulow, ktore mozna usunac automatycznie)
   EAX = 0
   EAX = blad EINVAL, EPERM, EFAULT, ENOENT, EBUSY
     _________________________________________________________________

   130
   177
   Pobierz symbole eksportowane przez jadro i moduly
   (sys_get_kernel_syms)
   EBX/RDI = adres struktury kernel_sym (0 oznacza, ze chcemy tylko
   pobrac liczbe symboli)
   EAX = liczba symboli
   EAX = blad EINVAL, EPERM, EFAULT, ENOENT, EBUSY
     _________________________________________________________________

   131
   179
   Zarzadzanie limitami dyskowymi (sys_quotactl)
   EBX/RDI = komenda limitu
   ECX/RSI = adres nazwy pliku urzadzenia blokowego, ktory ma byc
   zarzadzany
   EDX/RDX = identyfikator UID lub GID
   ESI/R10 = adres dodatkowej struktury danych (zalezy od komendy w
   EBX/RDI)
   EAX = 0
   EAX = blad EINVAL, EPERM, EFAULT, ENOENT, EBUSY, ENOTBLK, ESRCH,
   EUSERS, EACCES
     _________________________________________________________________

   132
   121
   Pobierz ID grupy procesow dla danego procesu (sys_getpgid)
   EBX/RDI = PID danego procesu
   EAX = ID grupy procesow
   EAX = blad ESRCH
     _________________________________________________________________

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

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

   135
   139
   Informacje o systemie plikow (sys_sysfs)
   EBX/RDI = opcja
   ECX/RSI, EDX/RDX - zalezne od EBX/RDI
   EAX zalezne od EBX/RDI
   EAX = blad EINVAL, EFAULT
     _________________________________________________________________

   136
   135
   Ustal domene wykonywania procesu (sys_personality)
   EBX/RDI = numer nowej domeny
   EAX = numer starej domeny
   EAX = blad
     _________________________________________________________________

   137
   183
   Funkcja systemowa sys_afs_syscall
   niezaimplementowane w jadrach 2.4
   zawsze EAX = ENOSYS
     _________________________________________________________________

   138
   122
   Ustal UID przy sprawdzaniu systemow plikow (sys_setfsuid)
   EBX/RDI = nowy ID uzytkownika
   EAX = stary UID (zawsze)
     _________________________________________________________________

   139
   123
   Ustal GID przy sprawdzaniu systemow plikow (sys_setfsgid)
   EBX/RDI = nowy ID grupy
   EAX = stary GID (zawsze)
     _________________________________________________________________

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

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

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

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

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

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

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

   147
   124
   Pobierz ID sesji dla procesu (sys_getsid)
   EBX/RDI = PID procesu, ktorego ID sesji chcemy znac
   EAX = ID sesji
   EAX = blad EPERM, ESRCH
     _________________________________________________________________

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

   149
   156
   Zmien parametry jadra (sys_sysctl)
   EBX/RDI = adres struktury sysctl_args
   EAX = 0
   EAX = blad EPERM, ENOTDIR, EFAULT
     _________________________________________________________________

   150
   149
   Zablokowanie stron w pamieci (sys_mlock)
   EBX/RDI = adres obszaru pamieci (wyrownany do wielokrotnosci rozmiaru
   strony pamieci)
   ECX/RSI = dlugosc obszaru pamieci
   EAX = 0
   EAX = blad EINVAL, EAGAIN, ENOMEM, EPERM
     _________________________________________________________________

   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)
