.\" -*- coding: UTF-8 -*-
.\" Copyright (C) 1996 Andries Brouwer (aeb@cwi.nl)
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" Written 11 April 1996 by Andries Brouwer <aeb@cwi.nl>
.\" 960412: Added comments from Stephen Tweedie
.\" Modified Tue Oct 22 22:28:41 1996 by Eric S. Raymond <esr@thyrsus.com>
.\" Modified Mon Jan  5 20:31:04 1998 by aeb.
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH sysctl 2 "4 grudnia 2022 r." "Linux man\-pages 6.03" 
.SH NAZWA
sysctl \- odczytuje/zapisuje parametry systemu
.SH SKŁADNIA
.nf
\fB#include <unistd.h>\fP
\fB#include <linux/sysctl.h>\fP
.PP
\fB[[deprecated]] int _sysctl(struct __sysctl_args *\fP\fIargs\fP\fB);\fP
.fi
.SH OPIS
\fBTo wywołanie systemowe już nie istnieje w aktualnych jądrach!\fP Zob. UWAGI.
.PP
\fB_sysctl\fP() odczytuje i/lub ustawia parametry jądra. Na przykład: nazwę
stacji, maksymalną liczbę otwartych plików. Argument wywołania ma postać
.PP
.in +4n
.EX
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 */
};
.EE
.in
.PP
Wywołanie to dokonuje przeszukiwania struktury drzewiastej, prawdopodobnie
przypominającej drzewo katalogowe z \fI/proc/sys\fP, i jeśli żądany element
zostanie znaleziony, wywołuje odpowiednią funkcję do odczytania lub
zmodyfikowania wartości.
.SH "WARTOŚĆ ZWRACANA"
Po pomyślnym zakończeniu, \fB_sysctl\fP() zwraca 0. W przeciwnym wypadku
zwracane jest \-1 i ustawiane \fIerrno\fP w sposób określający rodzaj błędu.
.SH BŁĘDY
.TP 
\fBEACCES\fP, \fBEPERM\fP
Brak uprawnień do przeszukiwania jednego z napotkanych \[Bq]katalogów\[rq],
lub brak praw odczytu, gdy \fIoldval\fP było niezerowe, lub brak praw zapisu,
gdy \fInewval\fP było niezerowe.
.TP 
\fBEFAULT\fP
Wywołanie żądało poprzedniej wartości przez ustawienie \fIoldval\fP na
nie\-NULL, lecz zezwalając na zerową wielkość w \fIoldlenp\fP.
.TP 
\fBENOTDIR\fP
\fIname\fP nie zostało znalezione.
.SH WERSJE
To wywołanie systemowe pojawiło się pierwotnie w Linuksie 1.3.57. Usunięto
je w Linuksie 5.5; obsługę w bibliotece usunięto w glibc 2.32.
.SH STANDARDY
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 \fI/proc/sys\fP a konwencje nazywania obiektów różnią się między
Linuksem i BSD 4.4, lecz deklaracja funkcji \fIsysctl\fP() jest taka sama w obu
przypadkach.
.SH UWAGI
Używanie tego wywołania systemowego było od dawna odradzane: od Linuksa
2.6.24, korzystanie z wywołania powodowało wypisywanie ostrzeżeń w dzienniku
jądra, a w Linuksie 5.5 ostatecznie je usunięto. W zamian należy używać
interfejsu \fI/proc/sys\fP.
.PP
Proszę zauważyć, że na starszych jądrach, w których to wywołanie systemowe
wciąż istnieje, jest dostępne jedynie, jeśli jądro skonfigurowano z opcją
\fBCONFIG_SYSCTL_SYSCALL\fP. Co więcej, glibc nie zapewnia opakowania tego
wywołania, co zmusza do korzystania z \fBsyscall\fP(2).
.SH USTERKI
Nazwy obiektów różnią się między wersjami jądra, czyniąc to wywołanie
systemowe bezużytecznym dla aplikacji.
.PP
Nie wszystkie dostępne obiekty są odpowiednio udokumentowane.
.PP
Nie jest jeszcze możliwe zmienianie systemu operacyjnego przez zapis do
\fI/proc/sys/kernel/ostype\fP.
.SH PRZYKŁADY
.\" SRC BEGIN (sysctl.c)
.EX
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/syscall.h>
#include <unistd.h>

#include <linux/sysctl.h>

#define ARRAY_SIZE(arr)  (sizeof(arr) / sizeof((arr)[0]))

int _sysctl(struct __sysctl_args *args);

#define OSNAMESZ 100

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

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

    osnamelth = sizeof(osname);

    if (syscall(SYS__sysctl, &args) == \-1) {
        perror("_sysctl");
        exit(EXIT_FAILURE);
    }
    printf("Na tym komputerze działa %*s\en", (int) osnamelth, osname);
    exit(EXIT_SUCCESS);
}
.EE
.\" SRC END
.SH "ZOBACZ TAKŻE"
\fBproc\fP(5)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Przemek Borys <pborys@dione.ids.pl>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
