NAZWA¶
sysctl - odczyt/zapis parametrów systemu
SKŁADNIA¶
#include <unistd.h>
#include <linux/unistd.h>
#include <linux/sysctl.h>
_syscall1(int, _sysctl, struct __sysctl_args *, args);
int _sysctl(struct __sysctl_args *args);
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
Wywołanie
_sysctl odczytuje i/lub ustawia parametry jądra.
Na przykład: nazwę hosta, maksymalną liczbę
otwartych plików. Argument wywołania ma postać
struct __sysctl_args {
int *name; /* wektor liczb całkowitych opisujący zmienną */
int nlen; /* długość tego wektora */
void *oldval; /* 0 lub adres, gdzie zachować starą wartość */
size_t *oldlenp; /* ilość miejsca na starą wartość
nadpisywana przez rzeczywisty jej rozmiar */
void *newval; /* 0 lub adres nowej wartości */
size_t newlen; /* rozmiar nowej wartości */
};
Wywołanie to dokonuje przeszukiwania struktury drzewiastej,
prawdopodobnie pzypominającej drzewo katalogowe z
/proc/sys, i
jeśli żądany element zostanie znaleziony, wywołuje
odpowiednią funkcję do odczytania lub zmodyfikowania
wartości.
PRZYKŁAD¶
#include <linux/unistd.h>
#include <linux/types.h>
#include <linux/sysctl.h>
_syscall1(int, _sysctl, struct __sysctl_args *, args);
int sysctl(int *name, int nlen, void *oldval, size_t *oldlenp,
void *newval, size_t newlen)
{
struct __sysctl_args args={name,nlen,oldval,oldlenp,newval,newlen};
return _sysctl(&args);
}
#define SIZE(x) sizeof(x)/sizeof(x[0])
#define OSNAMESZ 100
char osname[OSNAMESZ];
int osnamelth;
int name[] = { CTL_KERN, KERN_OSTYPE };
main(){
osnamelth = sizeof(osname);
if (sysctl(name, SIZE(name), osname, &osnamelth, 0, 0))
perror("sysctl");
else
printf("This machine is running %*s\n", osnamelth, osname);
return 0;
}
WARTOŚĆ ZWRACANA¶
Po pomyślnym zakończeniu,
_sysctl zwraca 0. W przeciwnym
wypadku zwracane jest -1 i ustawiane
errno w sposób
określający rodzaj błędu.
BŁĘDY¶
- ENOTDIR
- name nie zostało znalezione.
- EPERM
- Brak uprawnień do przeszukiwania jednego z napotkanych
`katalogów', lub brak praw odczytu, gdy oldval było
niezerowe, lub brak praw zapisu, gdy newval było
niezerowe.
- EFAULT
- Wywołanie żądało poprzedniej wartości
przez ustawienie oldval na nie-NULL, lecz zezwalając na
zerową wielkość w oldlenp.
ZGODNE Z¶
Wywołanie to jest to specyficzne dla Linuksa i nie powinno być
używane w przenośnych programach. Wywołanie
sysctl
jest obecne w Linuksie od 1.3.57. Pochodzi z 4.4BSD. Jedynie Linux posiada
jego odwzorowanie w
/proc/sys a konwencje nazywania obiektów
różnią się między Linuksem i BSD 4.4, lecz
deklaracja funkcji
sysctl(2) jest taka sama w obu przypadkach.
USTERKI¶
Nazwy obiektów różnią się pomiędzy
wersjami jądra. CZYNI TO NINIEJSZĄ FUNKCJĘ
SYSTEMOWĄ BEZUŻYTECZNĄ DLA APLIKACJI. Należy
zamiast niego używać interfejsu
/proc/sys.
Nie wszystkie dostępne obiekty są odpowiednio udokumentowane.
Nie jest jeszcze możliwe zmienianie systemu operacyjnego przez zapis do
/proc/sys/kernel/ostype.
ZOBACZ TAKŻE¶
proc(5)
Powyższe tłumaczenie pochodzi z nieistniejącego już
Projektu Tłumaczenia Manuali i
może nie być
aktualne. W razie zauważenia różnic między
powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub
funkcji, prosimy o zapoznanie się z oryginalną
(angielską) wersją strony podręcznika za pomocą
polecenia:
- man --locale=C 2 sysctl
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.