Linux |
CentOS 5.3 |
|
_sysctl(2) |
sysctl − Lire/écrire les paramètres système. |
#include <unistd.h> #include <linux/unistd.h> #include <linux/sysctl.h> #include <errno.h> _syscall1(int, _sysctl, struct __sysctl_args *, args) /* L’utilisation de syscall(2) est préférable ; voir intro(2) */ 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 répertoire /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. |
EFAULT |
Demande de lecture de la valeur précédente en fournissant oldval non NULL, mais pas de place disponible dans |
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. oldlenp. |
Cet appel système est spécifique Linux et ne doit pas être employé dans les programmes destinés à être portables. Un appel sysctl() est présent dans Linux depuis la version 1.3.57. Il existait dans BSD 4.4. Seul Linux dispose du miroir /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-SYSTÃME
N’A AUCUN INTÃRÃT POUR LES APPLICATIONS.
Utilisez l’interface /proc/sys à la
place. |
proc(5) |
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 15 octobre 1996 et révisée le 25 juillet 2006. L’équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=en man 2 sysctl ». N’hésitez pas à signaler à l’auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel. |
_sysctl(2) |