Linux |
CentOS 4.8 |
|
sysctl(2) |
sysctl − Lire / écrire les paramètres système. |
#include <unistd.h> #include <linux/unistd.h> #include <linux/sysctl.h> _syscall1(int, _sysctl, struct __sysctl_args *, args); int _sysctl(struct __sysctl_args *args); |
L’appel système _sysctl lit et/ou écrit les paramètres du noyau. Par exemple le nom d’hôte ou le nombre maximum de fichiers ouverts. L’argument a la forme struct __sysctl_args { int *name; /* integer vector describing variable */ int nlen; /* length of this vector */ void *oldval; /* 0 or address where to store old value */ size_t *oldlenp; /* available room for old value, overwritten by actual size of old value */ void *newval; /* 0 or address of new value */ size_t newlen; /* size of new value */ }; Cet appel effectue une recherche dans la structure arborescente regroupée sous le repertoire /proc/sys, puis, si les valeurs réclamées y sont trouvées, appelle les routines appropriées pour lire ou modifier les valeurs. |
#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("Cette machine fonctionne avec %*s\n", osnamelth, osname); return 0; } |
_sysctl renvoie 0 s’il réussit, et −1 s’il échoue auquel cas errno contient le code d’erreur. |
ENOTDIR |
name non trouvé |
EPERM |
pas de droits de parcours sur l’un des "répertoires" rencontrés, ou pas de permission de lecture avec oldval non nul, ou encore pas de permission d’écriture avec newval non nul. |
||
EFAULT |
Demande de lecture de la valeur précédente en fournissant oldval non NULL, mais pas de place disponible dans oldlenp. |
Cet appel système est spécifique Linux et ne doit pas être employé dans les programmes destinés à être portables. sysctl est présent dans Linux depuis la version 1.3.57. Il existait dans BSD 4.4. Seul Linux dispose du mirroir /proc/sys et les conventions de noms d’objets diffèrent entre Linux et BSD 4.4, mais les déclarations de la fonction sysctl(2) sont identiques sur les deux systèmes. |
Les noms des objets peuvent varier d’une version à l’autre du noyau. CET APPEL SYSTEME N’A AUCUN INTERET POUR LES APPLICATIONS. Utilisez l’interface /proc/sys à la place. Tous les objets disponibles ne sont pas proprement
documentés. |
proc(5). |
Christophe Blaess, 1997. |
sysctl(2) |