Opis funkcji systemowych syscall: 51-100

Jeśli jakaś funkcja zakończy się błędem, w RAX zwracana jest wartość ujemna z przedziału od -4096 do -1 włącznie.

Z drugiej strony, opisy funkcji na stronach manuala mówią, że zwracane jest -1, a wartość błędu jest zapisywana do zmiennej errno z biblioteki GLIBC. Dzieje się tak tylko w przypadku, gdy korzystamy z interfejsu języka C (czyli deklarujemy i uruchamiamy zewnętrzne funkcje odpowiadające wywołaniom systemowym i linkujemy nasz program z biblioteką języka C), a nie bezpośrednio z wywołań systemowych (czyli syscall).

Najbardziej aktualne informacje o funkcjach systemowych można znaleźć zazwyczaj w sekcji 2 (lub 3) manuala, na przykład man 2 open.

Najnowsze wersje jądra można znaleźć na www.kernel.org, a pliki z listą funkcji i ich numerów są pod ścieżkami:

Najnowsze wersje stron manuala można znaleźć tu: www.kernel.org/pub/linux/docs/man-pages.

Napis ASCIIZ oznacza łańcuch znaków ASCII zakończony znakiem/bajtem Zerowym.

Jeśli potrzeba, przy każdej funkcji jest odnośnik do opisu argumentów i innych dodatkowych informacji: typów danych, wartości błędów, możliwych wartości parametrów itp.

Podstawowe funkcje syscall: 51-100
Numer/ RAX Opis ArgumentyZwraca
51
Pobierz nazwę gniazda (sys_getsockname)
RDI = deskryptor gniazda
RSI = adres struktury sockaddr (zależnej od protokołu), opisującej adres, w którym system zwróci adres, do którego gniazdo jest przypisane
RDX = adres zmiennej (32-bitowej), która otrzyma wielkość struktury, na którą wskazuje RSI
RAX = 0
RAX = błąd EBADF, EFAULT, EINVAL, ENOBUFS, ENOTSOCK

52
Pobierz nazwę klienta podłączonego do gniazda (sys_getpeername)
RDI = deskryptor gniazda
RSI = adres struktury sockaddr (zależnej od protokołu), opisującej adres, w którym system zwróci adres klienta podłączonego do tego gniazda
RDX = adres zmiennej (32-bitowej), która otrzyma wielkość struktury, na którą wskazuje RSI
RAX = 0
RAX = błąd EBADF, EFAULT, EINVAL, ENOBUFS, ENOTCONN, ENOTSOCK

53
Stwórz parę połączonych gniazd (sys_socketpair)
RDI = domena tworzonych gniazd
RSI = typ tworzonych gniazd
RDX = protokół dla tworzonych gniazd (zwykle 0, patrz: man 5 protocols, man 3 getprotoent)
R10 = adres tablicy dwóch DWORDów, w których zostaną umieszczone deskryptory nowych gniazd
RAX = 0
RAX = błąd EAFNOSUPPORT, EFAULT, EMFILE, ENFILE, EOPNOTSUPP, EPROTONOSUPPORT

54
Ustaw opcje gniazda (sys_setsockopt)
RDI = deskryptor gniazda
RSI = poziom, do którego odnosi się opcja: SOL_SOCKET=1 dla gniazda lub numer protokołu (patrz: man 5 protocols, man 3 getprotoent)
RDX = nazwa opcji (odpowiednia dla protokołu)
R10 = adres zmiennej lub zmiennych z wartościami opcji (odpowiednich dla protokołu)
R8 = liczba wartości opcji w zmiennej, której adres jest w R10
RAX = 0
RAX = błąd EBADF, EFAULT, EINVAL, ENOPROTOOPT, ENOTSOCK

55
Pobierz opcje gniazda (sys_getsockopt)
RDI = deskryptor gniazda
RSI = poziom, do którego odnosi się opcja: SOL_SOCKET=1 dla gniazda lub numer protokołu (patrz: man 5 protocols, man 3 getprotoent)
RDX = nazwa opcji (odpowiednia dla protokołu)
R10 = adres zmiennej lub zmiennych, które otrzymają wartości opcji
R8 = liczba miejsc na wartości opcji w zmiennej, której adres jest w R10
RAX = 0
RAX = błąd EBADF, EFAULT, EINVAL, ENOPROTOOPT, ENOTSOCK

56
Utwórz klon procesu (sys_clone)
RDI = flagi klonowania
RSI = wskaźnik na oddzielny stos klona
RDX = wskaźnik na strukturę pt_regs lub 0

RAX = numer PID klona lub
RAX = błąd EAGAIN, ENOMEM, EINVAL, EPERM

57
Uruchomienie nowego procesu (sys_fork)
RDI = adres struktury pt_regs
RAX = id procesu potomnego (PID)
RAX=błąd EAGAIN, ENOMEM

58
Utwórz proces potomny i zablokuj rodzica (sys_vfork)
nic
RAX = PID procesu potomnego
RAX = błąd EAGAIN, ENOMEM

59
Uruchomienie innego programu (sys_execve)
RDI=adres nazwy (ze ścieżką) programu ASCIIZ
RSI = adres zakończonej dwordem 0 listy adresów argumentów uruchamianego programu ASCIIZ
RDX = adres zakończonej dwordem 0 listy adresów zmiennych środowiska dla uruchamianego programu ASCIIZ

nie wraca do programu wywołującego
RAX = błąd E2BIG, EACCES, EINVAL, EOIO, EISDIR, ELIBBAD, ELOOP, ENFILE, ENOEXEC, ENOENT, ENOMEM, ENOTDIR, EFAULT, ENAMETOOLONG, EPERM, ETXTBUSY

60
Wyjście z programu (sys_exit)
RDI = kod wyjścia (errorlevel)
nie wraca do programu wywołującego

61
Czekaj na zakończenie procesu (sys_wait4)
RDI = PID procesu potomnego lub specyfikacja
RSI = NULL lub adres zmiennej DWORD, która otrzyma status
RDX = opcje
R10 = adres struktury rusage
RAX = PID zakończonego procesu
RAX = błąd
RAX = 0 dla WNOHANG

62
Wyślij sygnał do procesu (sys_kill)
RDI = numer PID procesu (patrz też specyfikacja)
RSI = numer sygnału
RAX = 0
RAX = błąd EINVAL, EPERM, ESRCH

63
Pobierz informację o jądrze (sys_uname)
RDI = adres struktury utsname
RAX = 0
RAX = błąd EINVAL, EPERM, EFAULT

64
Pobierz identyfikator zbioru semaforów (sys_semget)
RDI = klucz identyfikujący
RSI = liczba semaforów do utworzenia, gdy klucz ma wartość IPC_PRIVATE=20 lub gdy nie ma jeszcze semaforów powiązanych z tym kluczem, a flagi zawierają IPC_CREAT
RDX = flagi: 0 lub zORowane wartości IPC_CREAT=00001000 (ósemkowo) i IPC_EXCL=02000 (ósemkowo), a dodatkowo przy tworzeniu semaforów, 9 najmłodszych bitów to uprawnienia (takie same, jak w funkcji open)
RAX = identyfikator zestawu semaforów
RAX = błąd EACCES, EEXIST, EINVAL, ENOENT, ENOMEM, ENOSPC

65
Operacje na semaforze (sys_semop)
RDI = identyfikator zestawu semaforów
RSI = adres tablicy struktur sembuf
RDX = liczba elementów w tablicy spod RSI
RAX = 0
RAX = błąd E2BIG, EACCES, EAGAIN, EFAULT, EFBIG, EIDRM, EINTR, EINVAL, ENOMEM, ERANGE

66
Kontrola semaforu (sys_semctl)
RDI = identyfikator zestawu semaforów
RSI = numer semafora
RDX = komenda dla semaforów
R10 = unia semun (przekazywany jest jeden z elementów)
RAX = wynik komendy
RAX = błąd EACCES, EFAULT, EIDRM, EINVAL, EPERM, ERANGE

67
Odłącz współdzielony segment pamięci (sys_shmdt)
RDI = adres współdzielonego obszaru pamięci (zwrócony przez shmat)
RAX = 0
RAX = błąd EINVAL

68
Pobierz identyfikator kolejki wiadomości (sys_msgget)
RDI = klucz identyfikujący. Tworzona jest nowa kolejka gdy klucz ma wartość IPC_PRIVATE=20 lub gdy nie ma jeszcze kolejki powiązanej z tym kluczem a flagi zawierają IPC_CREAT
RSI = flagi: 0 lub zORowane wartości IPC_CREAT=00001000 (ósemkowo) i IPC_EXCL=02000 (ósemkowo), a dodatkowo przy tworzeniu kolejki, 9 najmłodszych bitów to uprawnienia (takie same, jak w funkcji open)
RAX = identyfikator kolejki wiadomości
RAX = błąd EACCES, EEXIST, ENOENT, ENOMEM, ENOSPC

69
Wyślij wiadomość do kolejki wiadomości (sys_msgsnd)
RDI = identyfikator kolejki wiadomości
RSI = adres struktury z wiadomością do wysłania
RDX = liczba bajtów do wysłania
R10 = flagi: 0 lub IPC_NOWAIT=04000 (ósemkowo)
RAX = 0
RAX = błąd EACCES, EAGAIN, EFAULT, EIDRM, EINTR, EINVAL, ENOMEM

70
Odbierz wiadomość z kolejki wiadomości (sys_msgrcv)
RDI = identyfikator kolejki wiadomości
RSI = adres struktury wiadomości, która otrzyma odebraną wiadomość
RDX = maksymalna liczba bajtów do odebrania
R10 = typ wiadomości (0 oznacza pierwszą, R10 > 0 oznacza pierwszą tego typu, R10 < 0 oznacza pierwszą o typie niewiększym od bezwzględnej wartości R10)
R8 = flagi msgrcv
RAX = liczba bajtów zapisanych do bufora
RAX = błąd E2BIG, EACCES, EAGAIN, EFAULT, EIDRM, EINTR, EINVAL, ENOMSG

71
Kontrola kolejki wiadomości (sys_msgctl)
RDI = identyfikator kolejki wiadomości
RSI = komenda
RDX = adres struktury msqid_ds
RAX = wynik komendy
RAX = błąd EACCES, EFAULT, EIDRM, EINVAL, EPERM

72
Kontrola nad deskryptorem pliku (sys_fcntl)
RDI = deskryptor pliku
RSI = kod komendy
RDX zależy od komendy
RAX zależy od komendy
RAX = błąd EACCES, EAGAIN, EBADF, EDEADLK, EFAULT, EINTR, EINVAL, EMFILE, ENOLOCK, EPERM

73
Zmień blokowanie plików (sys_flock)
RDI = deskryptor otwartego pliku
RSI = operacja do wykonania
RAX = 0
RAX = błąd EWOULDBLOCK, EBADF, EINTR, EINVAL, ENOLCK

74
Zapisz pamięć podręczną na dysk (sys_fsync)
RDI = deskryptor pliku, który ma być zsynchronizowany na dysk
RAX = 0
RAX = błąd

75
Zapisz bufory danych pliku na dysk (sys_fdatasync)
RDI = deskryptor pliku, którego DANE będą zsynchronizowane (ale na przykład czas dostępu nie będzie zmieniony)
RAX = 0
RAX = błąd EBADF, EIO, EROFS

76
Skróć plik (sys_truncate)
RDI = adres nazwy pliku ASCIIZ
RSI = liczba bajtów, do której ma zostać skrócony plik
RAX = 0
RAX = błąd

77
Skróć plik (sys_ftruncate)
RDI = deskryptor pliku otwartego do zapisu
RSI = liczba bajtów, do której ma zostać skrócony plik
RAX = 0
RAX = błąd

78
Pobierz wpisy o katalogach (sys_getdents)
RDI = deskryptor otwartego katalogu
RSI = adres obszaru pamięci na struktury dirent
RDX = rozmiar obszaru pamięci pod [RSI]
RAX = 0
RAX = błąd EBADF, EFAULT, EINVAL, ENOENT, ENOTDIR

79
Pobierz bieżący katalog roboczy (sys_getcwd)
RDI = adres bufora, który otrzyma ścieżkę
RSI = długość tego bufora
RAX = RDI
RAX=NULL, gdy błąd ERANGE, EACCES, EFAULT, EINVAL, ENOENT

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

81
Zmień katalog roboczy (sys_fchdir)
RDI = deskryptor otwartego katalogu
RAX = 0
RAX = błąd EBADF, EACCES i inne

82
Przenieś plik/Zmień nazwę pliku (sys_rename)
RDI=adres starej nazwy (i ewentualnie ścieżki) ASCIIZ
RSI=adres nowej nazwy (i ewentualnie ścieżki) ASCIIZ
RAX = 0
RAX = błąd EBUSY, EEXIST, EISDIR, ENOTEMPTY, EXDEV (i inne błędy systemu plików)

83
Utwórz katalog (sys_mkdir)
RDI = adres ścieżki/nazwy ASCIIZ
RSI = prawa dostępu / tryb
RAX = 0
RAX = błąd - każdy związany z systemem plików lub prawami dostępu

84
Usuń katalog (sys_rmdir)
RDI = adres ścieżki/nazwy ASCIIZ
RAX = 0
RAX = błąd 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 dostępu / tryb
RAX = deskryptor pliku
RAX = błąd EACCES, EEXIST, EFAULT, EISDIR, ELOOP, EMFILE, ENAMETOOLONG, ENFILE, ENOENT, ENODEV, ENODIR, ENOMEM, ENOSPC, ENXIO, EROFS, ETXTBSY

86
Utworzenie twardego dowiązania do pliku (sys_link)
RDI = adres nazwy istniejącego pliku ASCIIZ
RSI = adres nazwy nowego pliku ASCIIZ
RAX = 0
RAX=błąd EACCES, EIO, EPERM, EEXIST, EFAULT, ELOOP, EMLINK, ENAMETOOLONG, ENOENT, ENOMEM, ENOSPC, ENOTDIR, EROFS, EXDEV

87
Usunięcie pliku (sys_unlink)
RDI = adres nazwy pliku ASCIIZ
RAX = 0
RAX=błąd EACCES, EFAULT, EIO, EISDIR, ELOOP, ENOENT, ENAMETOOLONG, ENOMEM, ENOTDIR, EPERM, EROFS

88
Stwórz dowiązanie symboliczne do pliku (sys_symlink)
RDI = adres nazwy pliku ASCIIZ
RSI = adres nazwę linku ASCIIZ
RAX = 0
RAX = błędy związane z uprawnieniami lub systemem plików

89
Przeczytaj zawartość linku symbolicznego (sys_readlink)
RDI = adres nazwy dowiązania symbolicznego ASCIIZ
RSI = adres bufora, który otrzyma przeczytaną informację
RDX = długość bufora
RAX = liczba przeczytanych znaków
RAX = błąd

90
Zmiana uprawnień (sys_chmod)
RDI = adres nazwy pliku/katalogu ASCIIZ
RSI = nowe prawa dostępu
RAX = 0
RAX = błąd EACCES, EBADF, EFAULT, EIO, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, EPERM, EROFS

91
Zmiana uprawnień (sys_fchmod)
RDI = deskryptor otwartego pliku
RSI = nowe prawa dostępu
RAX = 0
RAX = błąd

92
Zmiana właściciela pliku (sys_chown)
RDI=adres ścieżki do pliku
RSI = UID nowego właściciela
RDX = GID nowej grupy
RAX = 0
RAX = błąd na przykład EPERM, EROFS, EFAULT, ENOENT, ENAMETOOLONG, ENOMEM, ENOTDIR, EACCES, ELOOP

93
Zmiana właściciela (sys_fchown)
RDI = deskryptor otwartego pliku
RSI = nowy numer użytkownika
RDX = nowy numer grupy
RAX = 0
RAX = błąd

94
Zmiana właściciela (sys_lchown)
RDI = adres nazwy pliku/katalogu ASCIIZ
RSI = nowy numer użytkownika
RDX = nowy numer grupy
RAX = 0
RAX = błąd EPERM, EROFS, EFAULT, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, EACCES, ELOOP i inne

95
Ustaw maskę uprawnień przy tworzeniu plików (sys_umask)
RDI = maska, patrz prawa dostępu / tryb
Gdy tworzymy plik o uprawnieniach X, naprawdę 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 = błąd EFAULT, EINVAL, EPERM

97
Pobierz limity zasobów (sys_getrlimit)
RDI = numer zasobu
RSI = adres struktury rlimit
RAX = 0
RAX = błąd EFAULT, EINVAL, EPERM

98
Pobierz zużycie zasobów (sys_getrusage)
RDI = numer użytkownika (who)
RSI = adres struktury rusage
RAX = 0
RAX = błąd EFAULT, EINVAL, EPERM

99
Pobierz statystyki systemowe (sys_sysinfo)
RDI = adres struktury sysinfo
RAX = 0
RAX = błąd

100
Pobierz czasy procesów (sys_times)
RDI = adres struktury tms
RAX = liczba taktów zegara
EAX = błąd



Poprzednia część (klawisz dostępu 3)
Kolejna część (klawisz dostępu 4)
Spis treści off-line (klawisz dostępu 1)
Spis treści on-line (klawisz dostępu 2)
Ułatwienia dla niepełnosprawnych (klawisz dostępu 0)