sysctl(2) System Calls Manual sysctl(2) NAZWA sysctl - odczytuje/zapisuje parametry systemu SKLADNIA #include #include [[deprecated]] int _sysctl(struct __sysctl_args *args); OPIS To wywolanie systemowe juz nie istnieje w aktualnych jadrach! Zob. UWAGI. _sysctl() odczytuje i/lub ustawia parametry jadra. Na przyklad: nazwe stacji, maksymalna liczbe otwartych plikow. Argument wywolania ma postac struct __sysctl_args { int *name; /* wektor liczb calkowitych opisujacy zmienna */ int nlen; /* liczba elementow tego wektora */ void *oldval; /* 0 lub adres, gdzie zachowac stara wartosc */ size_t *oldlenp; /* ilosc miejsca na stara wartosc, nadpisywana przez rzeczywisty jej rozmiar */ void *newval; /* 0 lub adres nowej wartosci */ size_t newlen; /* rozmiar nowej wartosci */ }; Wywolanie to dokonuje przeszukiwania struktury drzewiastej, prawdopodobnie przypominajacej drzewo katalogowe z /proc/sys, i jesli zadany element zostanie znaleziony, wywoluje odpowiednia funkcje do odczytania lub zmodyfikowania wartosci. WARTOSC ZWRACANA Po pomyslnym zakonczeniu, _sysctl() zwraca 0. W przeciwnym wypadku zwracane jest -1 i ustawiane errno w sposob okreslajacy rodzaj bledu. BLEDY EACCES EPERM Brak uprawnien do przeszukiwania jednego z napotkanych ,,katalogow", lub brak praw odczytu, gdy oldval bylo niezerowe, lub brak praw zapisu, gdy newval bylo niezerowe. EFAULT Wywolanie zadalo poprzedniej wartosci przez ustawienie oldval na nie-NULL, lecz zezwalajac na zerowa wielkosc w oldlenp. ENOTDIR name nie zostalo znalezione. STANDARDY Linux. HISTORIA 4.4BSD, Linux 1.3.57. Usuniete w: Linuksie 5.5, glibc 2.32. Jedynie Linux posiada jego odwzorowanie w /proc/sys a konwencje nazywania obiektow roznia sie miedzy Linuksem i 4.4BSD, lecz deklaracja funkcji sysctl() jest taka sama w obu przypadkach. UWAGI Uzywanie tego wywolania systemowego bylo od dawna odradzane: od Linuksa 2.6.24, korzystanie z wywolania powodowalo wypisywanie ostrzezen w dzienniku jadra, a w Linuksie 5.5 ostatecznie je usunieto. W zamian nalezy uzywac interfejsu /proc/sys. Prosze zauwazyc, ze na starszych jadrach, w ktorych to wywolanie systemowe wciaz istnieje, jest dostepne jedynie, jesli jadro skonfigurowano z opcja CONFIG_SYSCTL_SYSCALL. Co wiecej, glibc nie zapewnia opakowania tego wywolania, co zmusza do korzystania z syscall(2). USTERKI Nazwy obiektow roznia sie miedzy wersjami jadra, czyniac to wywolanie systemowe bezuzytecznym dla aplikacji. Nie wszystkie dostepne obiekty sa odpowiednio udokumentowane. Nie jest jeszcze mozliwe zmienianie systemu operacyjnego przez zapis do /proc/sys/kernel/ostype. PRZYKLADY #define _GNU_SOURCE #include #include #include #include #include #include #include int _sysctl(struct __sysctl_args *args); #define OSNAMESZ 100 int main(void) { int name[] = { CTL_KERN, KERN_OSTYPE }; char osname[OSNAMESZ]; size_t osnamelth; struct __sysctl_args args; memset(&args, 0, sizeof(args)); args.name = name; args.nlen = countof(name); args.oldval = osname; args.oldlenp = &osnamelth; osnamelth = sizeof(osname); if (syscall(SYS__sysctl, &args) == -1) { perror("_sysctl"); exit(EXIT_FAILURE); } printf("Na tym komputerze dziala %*s\n", (int) osnamelth, osname); exit(EXIT_SUCCESS); } ZOBACZ TAKZE proc(5) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Przemek Borys , Andrzej Krzysztofowicz i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.18 10 lutego 2026 r. sysctl(2)