Loading

NOM

       system - Exécuter une commande shell

SYNOPSIS

       #include <stdlib.h>

       int system(const char *command);

       La  fonction  system()  exécute  la  commande  indiquée dans command en
       appelant /bin/sh -c command, 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 command 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)

COLOPHON

       Cette page fait partie de  la  publication  3.23  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      être       trouvées       à       l’adresse
       http://www.kernel.org/doc/man-pages/.

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