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) | ![]() |