SYSCTL(2) Manuel du programmeur Linux SYSCTL(2)
NOM
sysctl - Lire / écrire les paramètres système.
SYNOPSIS
#include <unistd.h>
#include <linux/unistd.h>
#include <linux/sysctl.h>
_syscall1(int, _sysctl, struct __sysctl_args *, args);
int _sysctl(struct __sysctl_args *args);
DESCRIPTION
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 rou
tines appropriées pour lire ou modifier les valeurs.
EXEMPLE
#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 };
Linux 25 Avril 1998 1
SYSCTL(2) Manuel du programmeur Linux SYSCTL(2)
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;
}
VALEUR RENVOYÉE
_sysctl renvoie 0 s'il réussit, et -1 s'il échoue auquel
cas errno contient le code d'erreur.
ERREURS
ENOTDIR
name non trouvé
EPERM pas de droits de parcours sur l'un des "réper
toires" 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 four
nissant oldval non NULL, mais pas de place
disponible dans oldlenp.
CONFORMITÉ
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 fonc
tion sysctl(2) sont identiques sur les deux systèmes.
BUGS
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 docu
mentés.
Il n'est pas possible de changer /proc/sys/kernel/ostype.
VOIR AUSSI
proc(5).
TRADUCTION
Christophe Blaess, 1997.
Linux 25 Avril 1998 2