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/.