Provided by: manpages-fr-dev_4.23.1-1_all bug

NOM

       sysctl - Lire/écrire les paramètres système

SYNOPSIS

       #include <unistd.h>
       #include <linux/sysctl.h>

       [[obsolète]] int _sysctl(struct __sysctl_args *args);

DESCRIPTION

       Cet appel système n'existe plus dans les noyaux actuels ! Consultez NOTES.

       L'appel  système  _sysctl()  lit  et/ou écrit les paramètres du noyau. Par exemple, le nom
       d'hôte ou le nombre maximal de fichiers ouverts. L'argument a la forme

           struct __sysctl_args {
               int    *name;    /* tableau d'entiers décrivant la variable */
               int     nlen;    /* longueur de ce tableau */
               void   *oldval;  /* 0 ou adresse où stocker l'ancienne valeur */
               size_t *oldlenp; /* espace disponible pour l'ancienne valeur,
                                   remplacé par la taille réelle de cette valeur */
               void   *newval;  /* 0 ou adresse de la nouvelle valeur */
               size_t  newlen;  /* taille de la nouvelle valeur */
           };

       Cet appel effectue une recherche dans la structure arborescente, sans doute de type  arbre
       de répertoires sous /proc/sys, puis, si les valeurs réclamées y sont trouvées, appelle les
       routines appropriées pour lire ou modifier les valeurs.

VALEUR RENVOYÉE

       _sysctl() renvoie 0 s'il réussit. Autrement, une valeur de -1 est renvoyée  et  errno  est
       défini pour indiquer l'erreur.

ERREURS

       EACCES
       EPERM  Pas  de  droit  de  parcours  sur  l'un  des  « répertoires » rencontrés, ou pas de
              permission de lecture où  oldval  était  non  nul,  ou  encore  pas  de  permission
              d'écriture où newval était non nul.

       EFAULT Demande de lecture de la valeur précédente en fournissant oldval non NULL, mais pas
              de place allouée dans oldlenp.

       ENOTDIR
              name non trouvé.

STANDARDS

       Linux.

HISTORIQUE

       Linux 1.3.57. Supprimé dans Linux 5.5, glibc 2.32.

       Il existait dans 4.4BSD. Seul Linux dispose du miroir /proc/sys et les conventions de noms
       d'objets  diffèrent  entre  Linux et 4.4BSD, mais les déclarations de la fonction sysctl()
       sont identiques sur les deux systèmes.

NOTES

       L'utilisation  de  cet  appel  système  est   déconseillée   depuis   longtemps :   depuis
       Linux 2.6.24,  son  utilisation  provoque  des avertissements dans le journal du noyau, et
       depuis Linux 5.5, il a finalement été supprimé. Utilisez plutôt l'interface /proc/sys.

       Veuillez noter que sur les anciens noyaux où cet appel système  existe  encore,  il  n'est
       disponible  que si le noyau a été configuré avec l'option CONFIG_SYSCTL_SYSCALL. En outre,
       la glibc  ne  founit  pas  de  fonction  d'enveloppe  pour  cet  appel  système,  imposant
       l'utilisation de syscall(2).

BOGUES

       Les noms des objets peuvent varier d'une version à l'autre du noyau, ce qui rend cet appel
       système sans intérêt pour les applications.

       Tous les objets disponibles ne sont pas correctement documentés.

       Il  n'est  pas  possible  de  changer  de  système   d'exploitation   en   écrivant   dans
       /proc/sys/kernel/ostype.

EXEMPLES

       #define _GNU_SOURCE
       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>
       #include <sys/syscall.h>
       #include <unistd.h>

       #include <linux/sysctl.h>

       #define ARRAY_SIZE(arr)  (sizeof(arr) / sizeof((arr)[0]))

       int _sysctl(struct __sysctl_args *args);

       #define OSNAMESZ 100

       int
       main(void)
       {
           int                   name[] = { CTL_KERN, KERN_OSTYPE };
           char                  osname[OSNAMESZ];
           size_t                osnamelth;
           struct __sysctl_args  args;

           memset(&args, 0, sizeof(args));
           args.name = name;
           args.nlen = ARRAY_SIZE(name);
           args.oldval = osname;
           args.oldlenp = &osnamelth;

           osnamelth = sizeof(osname);

           if (syscall(SYS__sysctl, &args) == -1) {
               perror("_sysctl");
               exit(EXIT_FAILURE);
           }
           printf("Cette machine fonctionne avec %*s\n", (int) osnamelth, osname);
           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       proc(5)

TRADUCTION

       La  traduction  française  de  cette  page  de  manuel  a  été créée par Christophe Blaess
       <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <stephan.rafin@laposte.net>,  Thierry
       Vignaud  <tvignaud@mandriva.com>,  François Micaux, Alain Portal <aportal@univ-montp2.fr>,
       Jean-Philippe   Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)    <jean-
       luc.coulon@wanadoo.fr>,    Julien    Cristau    <jcristau@debian.org>,    Thomas   Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau  <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis
       Barbier <barbier@debian.org>,  David  Prévot  <david@tilapin.org>  et  Jean-Pierre  Giraud
       <jean-pierregiraud@neuf.fr>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   concernant   les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.