Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       system - Exécuter une commande shell

SYNOPSIS

       #include <stdlib.h>

       int system(const char *command);

DESCRIPTION

       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 l'état 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  (avant  d'inclure  tout
       fichier   d'en‐tête),   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).

VOIR AUSSI

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

COLOPHON

       Cette page fait partie de la publication 3.65 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

       Depuis   2010,   cette   traduction   est   maintenue   à   l'aide   de    l'outil    po4a
       <http://po4a.alioth.debian.org/>  par l'équipe de traduction francophone au sein du projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Christophe   Blaess   <http://www.blaess.fr/christophe/>   (1996-2003),    Alain    Portal
       <http://manpagesfr.free.fr/>  (2003-2006).  Nicolas  François  et  l'équipe francophone de
       traduction de Debian (2006-2009).

       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> ».

                                        10 septembre 2010                               SYSTEM(3)