Provided by: manpages-pl-dev_0.5-1_all bug

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)

INFORMACJE O TŁUMACZENIU

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