EXECVE |
Exécution |
SVID 3, POSIX, BSD 4.3, ISO 9899 |
unistd.h |
Syntaxe
int execve(const char *path, char *const argv[], char *const envp[]);
|
Paramètres
Nom |
Description |
path |
Ce paramètre permet d'indiquer le nom du fichier à exécuter. |
argv[] |
Ce paramètre permet d'indiquer le tableau de paramètres. |
envp[] |
Ce paramètre permet d'indiquer un tableau de variable d'environnement. |
Description
Cette fonction permet d'exécuter un processus enfant avec un tableau de paramètres et ses variables d'environnement.
Remarques
- Les processus set-user-ID et set-group-ID ne peuvent pas être ptrace.
- Les distributions Linux ignore les bits set-user-ID et set-group-ID des scripts.
- Le résultat du montage d'un système de fichiers nosuid varie selon les versions du noyau Linux : certains refuseront
l'exécution des exécutables set-user-ID et set-group-ID lorsque cette situation donnerait à l'utilisateur des pouvoirs qu'elle n'avait pas déjà (et renverra EPERM),
certains ignoreront simplement les bits set-user-ID et set-group-ID et la fonction exec() se déroulera avec succès.
- Une longueur de ligne maximale de 127 caractères est autorisée pour la première ligne d'un «#!» de script d'interpréteur de commande exécutable.
- La sémantique du paramètre optional-arg d'un script d'interpréteur varie selon les mises en oeuvre. Sous les distributions Linux, la
chaîne de caractères entière suivant le nom de l'interpréteur est transmise en tant que paramètre unique à l'interpréteur, et cette chaîne de caractères peut inclure un espace blanc.
Cependant, le comportement diffère sur certains autres systèmes. Certains systèmes utilisent le premier espace blanc pour terminer optional-arg. Sur certains systèmes, un script
d'interpréteur peut avoir plusieurs paramètres et des espaces blancs dans optional-arg sont utilisés pour délimiter les paramètres.
- Sous les distributions Linux, le argv peut être spécifié comme NULL, ce qui a le même effet que de spécifier ce paramètre
comme pointeur vers une liste contenant un seul pointeur NULL. Ne profitez pas de cette erreur ! Il est non standard et non portable : sur la plupart des autres systèmes
UNIX, cette situation entraînera une erreur (EFAULT).
- La norme POSIX.1-2001 indique que les valeurs renvoyées par sysconf doivent être invariantes pendant la durée de vie d'un processus. Cependant, depuis Linux 2.6.23,
si la limite de ressources RLIMIT_STACK change, la valeur signalée par _SC_ARG_MAX changera également, pour refléter le fait que la limite d'espace pour contenir les
paramètres de ligne de commande et les variables d'environnement ont changés.
- Dans la version V6 de UNIX, la liste des paramètres d'un appel exec() était terminée par 0, tandis que la liste
de paramètres de main était terminée par -1. Ainsi, cette liste de paramètres n'était pas directement utilisable dans un autre appel à exec(). Depuis la version V7 de
UNIX, les deux sont NULL.
Dernière mise à jour : Dimanche, le 10 décembre 2017