Provided by:
manpages-de-dev_0.5-4.1ubuntu1_all 
NAME
sysctl - lese/schreibe Systemparameter
ÜBERSICHT
#include <unistd.h>
#include <linux/unistd.h>
#include <linux/sysctl.h>
_syscall1(int, _sysctl, struct __sysctl_args *, args);
int _sysctl(struct __sysctl_args *args);
BESCHREIBUNG
Der Aufruf _sysctl liest und/oder schreibt Kernel-Parameter, zum
Beispiel den Rechnernamen oder die maximale Anzahl geöffneter Dateien.
Das Argument hat die Form
struct __sysctl_args {
int *name; /* ganzzahliger Vektor, der eine Variable
beschreibt */
int nlen; /* Länge dieses Vektors */
void *oldval; /* 0 oder Adresse, wo der alte Wert gespeichert
werden soll */
size_t *oldlenp; /* freier Raum für den alten Wert, überschrieben
durch die aktuelles Größe des alten Wertes */
void *newval; /* 0 oder Adresse des neuen Wertes */
size_t newlen; /* Länge des neuen Wertes */
};
Dieser Aufruf sucht in einer Baumstruktur, die möglicherweise einer
Verzeichnisstruktur unter /proc/sys ähnelt, und ruft, wenn der
geforderte Punkt gefunden wird, eine entsprechende Routine auf, um den
Wert zu lesen oder zu verändern.
BEISPIEL
#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 = SIZE(osname);
if (sysctl(name, SIZE(name), osname, &osnamelth, 0, 0))
perror("sysctl");
else
printf("This machine is running %*s\n", osnamelth, osname);
return 0;
}
RÜCKGABEWERTE
Bei erfolgreicher beendigung gibt _sysctl 0 zurück. Anderenfalls wird
ein Wert von -1 zurückgegeben und errno gesetzt, um den Fehler
anzuzeigen.
FEHLER
ENOTDIR
name wurde nicht gefunden.
EPERM Keine Such-Berechtigung für eines der auftretenden
‘Verzeichnisse’, oder keine Leseberechtigung wenn oldval nicht
null war, oder keine Schreibberechtigung wenn newval nicht null
war.
EFAULT Der Aufruf fragte nach dem vorherigen Wert durch setzen von
oldval auf nicht null, aber erlaubte Null Raum in oldlenp.
KONFORM ZU
Dieser Aufruf ist Linux-spezifisch.
GESCHICHTE
Einen Aufruf sysctl gibt es in Linux seit Version 1.3.57. Er entstand
in BSD-4.4. Ausschließlich Linux hat das Abbild /proc/sys. Schemata
der Objektbenennung unterscheiden sich in Linux und BSD 4.4, aber die
Deklaration der Funktion sysctl(2) sind in beiden die gleiche.
BUGS
Nicht alles verfügbaren Objekte sind richtig dokumentiert.
Es ist noch nicht möglich, das Betriebssystem durch schreiben nach
/proc/sys/kernel/ostype zu ändern.
SIEHE AUCH
proc(5).