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