Hauptindex | Abschnitt 2 | Optionen |
#include <linux/unistd.h>
#include <linux/sysctl.h>
_syscall1(int, _sysctl, struct __sysctl_args *, args);
int _sysctl(struct __sysctl_args *args);
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.
#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; }
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. |
24. Juni 1996 | SYSCTL (2) | Linux 1.3.85 |
Hauptindex | Abschnitt 2 | Optionen |
Bitte richten Sie Ihre Kommentare zu diesem Handbuch Seite Service, Ben Bullock. Privacy policy.