NOM
execl, execlp, execle, execv, execvp - Exécuter un fichier
SYNOPSIS
#include <unistd.h>
extern char **environ;
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg,
..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
La famille des fonctions exec() remplace l’image du processus en cours
par une nouvelle image du processus. Les fonctions décrites dans cette
page sont en réalité des frontaux pour execve(2) (voyez la page de
manuel de execve(2) pour plus de détails sur le remplacement de l’image
du processus en cours).
L’argument initial de toutes ces fonctions est le chemin d’accès du
fichier à exécuter.
Les arguments const char *arg ainsi que les points de suspension des
fonctions execl(), execlp(), et execle() peuvent être vues comme arg0,
arg1, ..., argn. Ensemble, ils décrivent une liste d’un ou plusieurs
pointeurs sur des chaînes de caractères terminées par des caractères
nuls, qui constituent les arguments disponibles pour le programme à
exécuter. Par convention, le premier argument doit pointer sur le nom
du fichier associé au programme à exécuter. La liste des arguments doit
se terminer par un pointeur NULL, et puisque ce sont des fonctions
variadiques, ce pointeur doit être transtypé avec (char *) NULL.
Les fonctions execv() et execvp() utilisent un tableau de pointeurs sur
des chaînes de caractères terminées par des caractères nuls, qui
constituent les arguments disponibles pour le programme à exécuter. Par
convention, le premier argument doit pointer sur le nom du fichier
associé au programme à exécuter. Le tableau de pointeurs doit se
terminer par un pointeur NULL.
La fonction execle() peut également indiquer l’environnement du
processus à exécuter en faisant suivre le pointeur NULL qui termine la
liste d’arguments, ou le pointeur du tableau argv par un paramètre
supplémentaire. Ce paramètre additionnel est un tableau de pointeurs
sur des chaînes de caractères terminées par des caractères nuls, qui
doit se terminer par un pointeur NULL. Les autres fonctions fournissent
au nouveau processus l’environnement constitué par la variable externe
environ.
Sémantique particulière pour execlp() et execvp()
Les fonctions execlp() et execvp() dupliqueront les actions de
l’interpréteur de commandes dans la recherche du fichier exécutable si
le nom fourni ne contient pas de barre oblique « / ». Le chemin de
recherche est spécifié dans la variable d’environnement PATH. Si cette
variable n’est pas définie, le chemin par défaut sera
« /bin:/usr/bin: ». De plus, certaines erreurs sont traitées de manière
spécifique.
Si l’accès au fichier est refusé (execve(2) renvoie EACCES), ces
fonctions continueront à parcourir le reste du chemin de recherche. Si
aucun fichier n’est trouvé, elles reviendront, et errno sera défini à
EACCES.
Si l’en-tête d’un fichier n’est pas reconnu (execve(2) renvoie
ENOEXEC), ces fonctions exécuteront un interpréteur de commandes
(/bin/sh) avec le chemin d’accès au fichier en tant que premier
argument. Si ceci échoue, aucune recherche supplémentaire n’est
effectuée.
VALEUR RENVOYÉE
Si l’une des fonctions exec() revient, c’est qu’une erreur a eu lieu.
La valeur de retour est -1, et errno contient le code d’erreur.
ERREURS
Toutes ces fonctions peuvent échouer et définir errno sur n’importe
quelle erreur décrite dans la fonction execve(2).
CONFORMITÉ
POSIX.1-2001.
NOTES
Sur certains systèmes, le chemin de recherche par défaut (employé si
l’environnement ne contient pas la variable PATH) contient le
répertoire courant à la suite de /bin et /usr/bin, afin d’éviter les
chevaux de Troie. Linux utilise encore le répertoire courant en premier
dans ce chemin de recherche par défaut.
Le comportement de execlp() et execvp() lorsqu’une erreur se produit
pendant l’exécution d’un programme est une pratique historique mais n’a
traditionnellement jamais été documenté, ni spécifié dans le standard
POSIX. Lorsque ETXTBSY est rencontré, BSD (et peut-être d’autres
systèmes) endorment le processus appelant puis ré-itère l’opération.
Linux considère cette situation comme une erreur grave, et revient
immédiatement.
Habituellement, les fonctions execlp() et execvp() ignoraient toutes
les erreurs sauf celles décrites ci-dessus, ENOMEM et E2BIG. Désormais,
elles reviennent à l’appelant si une autre erreur que celles-ci se
produit.
VOIR AUSSI
sh(1), execve(2), fork(2), ptrace(2), fexecve(3), environ(7)
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 Florentin Duneau <fduneau@gmail.com> 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> ».