EXEC(3)

 .

NOM
execl, execlp, execle, execv, execvp - Exécuter un programme

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[]);

DESCRIPTION
La famille de fonctions exec() remplace l'image mémoire du processus en cours par un nouveau processus. Les fonctions décrites dans cette page sont en réalité des frontaux pour l'appel système execve(2). (Voir la page de execve(2) pour des informations détaillées sur le remplacement 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 des 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é (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 pointeur 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 NULL de la table par un paramètre supplémentaire. 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. Certaines de ces fonctions ont une sémantique spécifique.

  Sémantique spécifique pour execlp() et execvp()

Les fonctions execlp() et execvp() agiront comme le shell dans la recherche du fichier exécutable si le nom fourni ne contient pas de slash « / ». 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 la permission d'accès au fichier est refusée (execve(2) renvoie EACCES), ces fonctions continueront à parcourir le reste du chemin de recherche. Si aucun fichier n'est trouvé, elles reviendront, et errno contiendra le code d'erreur EACCES.

Si l'en-tête d'un fichier n'est pas reconnu (execve(2) renvoie ENOEXEC), ces fonctions exécuteront un shell (/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 quelconque des fonctions exec() revient à l'appelant, 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 positionner 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 est une pratique historique mais n'a traditionnellement jamais été documenté, ni spécifié dans le standard POSIX. Lorsque l'erreur ETXTBSY se déclenche (fichier exécutable ouvert en écriture par un autre processus), BSD (et peut-être d'autres systèmes) endorment le processus appelant puis réiterent 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)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 23 octobre 1996 et révisée le 22 décembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 exec ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.