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