Provided by: manpages-pl-dev_20060617-3_all bug

NAZWA

       sysctl - odczyt/zapis parametrow systemu

SK/LADNIA

       #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

       Wywolanie  _sysctl odczytuje i/lub ustawia parametry jdra. Na przyklad:
       nazw hosta, maksymaln liczb otwartych  plikow.  Argument  wywolania  ma
       posta

       struct __sysctl_args {
               int *name;        /* wektor liczb calkowitych opisujcy zmienn */
               int nlen;         /* dlugo 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 wartoci */
               size_t newlen;    /* rozmiar nowej wartoci */
       };

       Wywolanie    to    dokonuje   przeszukiwania   struktury   drzewiastej,
       prawdopodobnie pzypominajcej drzewo katalogowe z /proc/sys, i jeli dany
       element  zostanie  znaleziony, wywoluje odpowiedni funkcj do odczytania
       lub zmodyfikowania wartoci.

PRZYK/LAD

       #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 pomylnym zakoczeniu, _sysctl zwraca 0. W przeciwnym wypadku zwracane
       jest -1 i ustawiane errno w sposob okrelajcy rodzaj bldu.

B/LDY

       ENOTDIR
              name nie zostalo znalezione.

       EPERM  Brak   uprawnie   do   przeszukiwania   jednego   z  napotkanych
              `katalogow', lub brak praw odczytu, gdy oldval  bylo  niezerowe,
              lub brak praw zapisu, gdy newval bylo niezerowe.

       EFAULT Wywolanie  dalo  poprzedniej  wartoci przez ustawienie oldval na
              nie-NULL, lecz zezwalajc na zerow wielko w oldlenp.

ZGODNE Z

       Wywolanie to jest to specyficzne dla Linuksa i nie powinno by uywane  w
       przenonych  programach.   Wywolanie  sysctl  jest  obecne w Linuksie od
       1.3.57. Pochodzi z 4.4BSD. Jedynie Linux posiada  jego  odwzorowanie  w
       /proc/sys  a  konwencje nazywania obiektow roni si midzy Linuksem i BSD
       4.4,  lecz  deklaracja  funkcji  sysctl(2)  jest  taka   sama   w   obu
       przypadkach.

USTERKI

       Nazwy obiektow roni si pomidzy wersjami jdra.  CZYNI TO NINIEJSZ FUNKCJ
       SYSTEMOW BEZUYTECZN DLA APLIKACJI.  Naley zamiast niego uywa interfejsu
       /proc/sys.
       Nie wszystkie dostpne obiekty s odpowiednio udokumentowane.
       Nie  jest jeszcze moliwe zmienianie systemu operacyjnego przez zapis do
       /proc/sys/kernel/ostype.

ZOBACZ TAKE

       proc(5)

INFORMACJE O T/LUMACZENIU

       Powysze tlumaczenie pochodzi z nieistniejcego ju  Projektu  Tlumaczenia
       Manuali  i  moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
       opisem a rzeczywistym zachowaniem  opisywanego  programu  lub  funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.