www.digipedia.pl - manuale

SYSCTL(2)

SYSCTL(2) Podręcznik programisty Linuksa SYSCTL(2)
1999 PTM Przemek Borys Last update: A. Krzysztofowicz <ankry@mif.pg.gda.pl>, Apr 2003, manpages 1.55
 
Copyright (C) 1996 Andries Brouwer (aeb@cwi.nl)
 
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
 
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one
 
Since the Linux kernel and libraries are constantly changing, this manual page may be incorrect or out-of-date. The author(s) assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. The author(s) may not have taken the same level of care in the production of this manual, which is licensed free of charge, as they might when working professionally.
 
Formatted or processed versions of this manual, if unaccompanied by the source, must acknowledge the copyright and authors of this work.
 
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.
 

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

1996-04-11 Linux 1.3.85