Scroll to navigation

EXEC(3) Manuel du programmeur Linux EXEC(3)

NOM

execl, execlp, execle, execv, execvp, execvpe - 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[]);
int execvpe(const char *file, char *const argv[],
char *const envp[]);


Exigences de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :

execvpe() : _GNU_SOURCE

DESCRIPTION

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) (consultez 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(), execvp() et execvpe() 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.

Les fonctions execle() et execvpe() permettent à l'appelant d'indiquer l'environnement du processus à exécuter à l’aide du paramètre envp. Ce paramètre 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 du processus appelant.

Sémantique particulière pour execlp() et execvp()

Les fonctions execlp(), execvp() et execvpe() 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 fichier est recherché dans la liste de répertoires, séparés par des deux-points, indiquée dans la variable d'environnement PATH. Si cette variable n'est pas définie, le chemin par défaut sera le répertoire actuel, suivi de la liste des répertoires renvoyée par confstr(_CS_PATH) (cet appel à confstr(3) renvoie habituellement « /bin:/usr/bin: »).

Si le nom du fichier indiqué inclut une barre oblique, alors PATH est ignoré et le fichier dont le chemin est fourni est exécuté.

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

Une sortie des fonctions exec() n'intervient que si une erreur s'est produite. La valeur de retour est -1, et errno contient le code d'erreur.

ERREURS

Toutes ces fonctions peuvent échouer et définir errno à n'importe quelle erreur décrite dans execve(2).

VERSIONS

La fonction execvpe() a été introduite dans la glibc 2.11.

CONFORMITÉ

POSIX.1-2001, POSIX.1-2008.

La fonction execvpe() est une extension GNU.

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 la norme 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.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). Florentin Duneau 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> ».

25 septembre 2010 GNU