Provided by: manpages-pl-dev_4.15.0-9_all bug

NAZWA

       sysctl - odczyt/zapis parametrów systemu

SKŁADNIA

       #include <unistd.h>
       #include <linux/sysctl.h>

       int _sysctl(struct __sysctl_args *args);

OPIS

       This system call no longer exists on current kernels! See NOTES.

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

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

       EACCES, 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.

       ENOTDIR
              name nie zostało znalezione.

WERSJE

       This system call first appeared in Linux 1.3.57.  It  was  removed  in  Linux  5.5;  glibc
       support was removed in version 2.32.

ZGODNE Z

       Wywołanie  to  jest  to  specyficzne  dla  Linuksa i nie powinno być używane w przenośnych
       programach. 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() jest taka sama w obu przypadkach.

UWAGI

       Use of this system call was long discouraged: since Linux 2.6.24, uses of this system call
       result  in  warnings  in  the  kernel  log,  and in Linux 5.5, the system call was finally
       removed.  Use the /proc/sys interface instead.

       Note that on older kernels where this system call still exists, it is  available  only  if
       the  kernel was configured with the CONFIG_SYSCTL_SYSCALL option.  Furthermore, glibc does
       not provide a wrapper for this system call, necessitating the use of syscall(2).

BŁĘDY

       The object names vary between kernel versions,  making  this  system  call  worthless  for
       applications.

       Nie wszystkie dostępne obiekty są odpowiednio udokumentowane.

       Nie    jest   jeszcze   możliwe   zmienianie   systemu   operacyjnego   przez   zapis   do
       /proc/sys/kernel/ostype.

PRZYKŁADY

       #define _GNU_SOURCE
       #include <unistd.h>
       #include <sys/syscall.h>
       #include <string.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <linux/sysctl.h>

       int _sysctl(struct __sysctl_args *args );

       #define OSNAMESZ 100

       int
       main(void)
       {
           struct __sysctl_args args;
           char osname[OSNAMESZ];
           size_t osnamelth;
           int name[] = { CTL_KERN, KERN_OSTYPE };

           memset(&args, 0, sizeof(args));
           args.name = name;
           args.nlen = sizeof(name)/sizeof(name[0]);
           args.oldval = osname;
           args.oldlenp = &osnamelth;

           osnamelth = sizeof(osname);

           if (syscall(SYS__sysctl, &args) == -1) {
               perror("_sysctl");
               exit(EXIT_FAILURE);
           }
           printf("This machine is running %*s\n", osnamelth, osname);
           exit(EXIT_SUCCESS);
       }

ZOBACZ TAKŻE

       proc(5)

O STRONIE

       Angielska wersja tej strony  pochodzi  z  wydania  5.13  projektu  Linux  man-pages.  Opis
       projektu,  informacje  dotyczące  zgłaszania  błędów oraz najnowszą wersję oryginału można
       znaleźć pod adresem https://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej  strony   podręcznika   są:   Przemek   Borys
       <pborys@dione.ids.pl> i Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją. Bliższe informacje o warunkach licencji
       można   uzyskać   zapoznając   się   z   GNU   General   Public   License   w   wersji   3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   lub   nowszej.   Nie  przyjmuje  się  ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy w tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej
       ⟨manpages-pl-list@lists.sourceforge.net⟩.