Provided by: manpages-fr-dev_2.64.1-1_all bug

NOM

       system - Exécuter une commande shell

SYNOPSIS

       #include <stdlib.h>

       int system(const char *commande);

DESCRIPTION

       La  fonction  system()  exécute  la  commande indiquée dans commande en
       appelant /bin/sh -c commande, et revient après l’exécution complète  de
       la  commande.  Durant cette exécution, le signal SIGCHLD est bloqué, et
       les signaux SIGINT et SIGQUIT sont ignorés.

VALEUR RENVOYÉE

       La valeur renvoyée est  -1  en  cas  d’erreur  (par  exemple  échec  de
       fork(2))  ou  le  code  de  retour  de la commande en cas de succès. Ce
       dernier code est dans le format indiqué dans wait(2). Ainsi, le  retour
       de la commande sera WEXITSTATUS(status). Dans le cas où /bin/sh ne peut
       pas être exécuté, le code  de  retour  sera  identique  à  celui  d’une
       commande effectuant un exit(127).

       Si  la  valeur  de  commande  est NULL, system() renvoie une valeur non
       nulle si le shell est accessible, et zéro sinon.

       system() n’affecte pas le statut d’attente des autres processus fils.

CONFORMITÉ

       C89, C99, POSIX.1-2001.

NOTES

       Si la macro de test de fonctionnalité _XOPEN_SOURCE  est  définie,  les
       macros  décrites dans wait(2) (WEXITSTATUS(), etc.) sont disponibles en
       incluant <stdlib.h>.

       Comme mentionné plus  haut,  system()  ignore  SIGINT  et  SIGQUIT.  Un
       programme  qui  l’appelle  en  boucle  risque  de  ne  pas pouvoir être
       interrompu, à moins qu’il ne vérifie le code de  retour  du  fils,  par
       exemple

           while (qqchose) {
               int ret = system("foo");

               if (WIFSIGNALED(ret) &&
                   (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
                       break;
           }

       N’utilisez  jamais  system()  dans  un  programme  avec  les privilèges
       Set-UID ou Set-GID. Des  variables  d’environnement  avec  des  valeurs
       étranges  peuvent être utilisées pour corrompre l’intégrité du système.
       Utilisez les fonctions de la famille  exec(3)  à  la  place,  mais  pas
       execlp(3)  ni execvp(3). system() ne fonctionnera pas correctement avec
       les programmes ayant des privilèges fournis par  les  bits  Set-UID  ou
       Set-GID  sur  les  systèmes où /bin/sh est bash version 2, car celui-ci
       rejette  les  privilèges  au  démarrage  (Debian  utilise  une  version
       modifiée  de bash où ce comportement est abandonné si on l’invoque sous
       le nom sh).

       Avec les versions de la glibc antérieures à 2.1.3, la  vérification  de
       la  disponibilité  de  /bin/sh  n’était pas faite lorsque command était
       NULL. Il était toujours supposé être disponible, et system()  renvoyait
       toujours  1  dans  ce  cas.  Depuis glibc 2.1.3, cette vérification est
       effectuée,  car,  même  si  POSIX.1-2001  impose  aux   implémentations
       conformes  de  fournir un shell, ce shell peut ne pas être opérationnel
       si le programme appelant a auparavant appelé chroot(2)  (ce  qui  n’est
       pas spécifié dans POSIX.1-2001).

       Il  est  possible  qu’une  commande shell renvoie 127, ainsi le code de
       retour n’est pas une indication sûre de l’échec de execve(2).

       Si la macro de test de fonctionnalité _XOPEN_SOURCE  est  définie,  les
       macros  décrites dans wait(2) (WEXITSTATUS(), etc.) sont disponibles en
       incluant <stdlib.h>.

VOIR AUSSI

       sh(1), signal(2), wait(2), exec(3)

TRADUCTION

       Cette page de manuel a été traduite  et  mise  à  jour  par  Christophe
       Blaess  <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
       Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et  mise  à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement         gérées         par         Nicolas         François
       <nicolas.francois@centraliens.net>    et    l’équipe   francophone   de
       traduction de Debian.

       Veuillez  signaler  toute  erreur   de   traduction   en   écrivant   à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document
       en utilisant la commande « man -L C <section> <page_de_man> ».

                               20 décembre 2004                      SYSTEM(3)