|
||||||||||||
|
|
SYSCTLSection: Bibliotheksfunktionen (2)Updated: 24. Juni 1996 Index Return to Main Contents NAMEsysctl - 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); BESCHREIBUNGDer Aufruf _sysctl liest und/oder schreibt Kernel-Parameter, zum Beispiel den Rechnernamen oder die maximale Anzahl geo^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ÜCKGABEWERTEBei erfolgreicher beendigung gibt _sysctl 0 zurück. Anderenfalls wird ein Wert von -1 zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.FEHLER
KONFORM ZUDieser Aufruf ist Linux-spezifisch.GESCHICHTEEinen Aufruf sysctl gibt es in Linux seit Version 1.3.57. Er entstand in BSD-4.4. Ausschlies^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.BUGSNicht 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 AUCHproc(5).
Index |
|||||||||||
|
||||||||||||