EXECVE(2)

NOM
execve - Executer un programme.

SYNOPSIS
#include <unistd.h>

int execve (const char *filename, const char *argv [], const char *envp[]);

DESCRIPTION
execve() execute le programme designe par filename. filename doit etre un executable binaire ou bien un shell script commencant par une ligne du type "#! interpreteur [arg]". Dans ce dernier cas, l'interpreteur doit etre indique par un nom complet, avec son chemin d'acces, et le contenu du fichier filename lui est presente sur son entree standard. En cas de reussite, execve() ne revient pas a l'appelant, et les segments de texte, de donnees, ainsi que la pile du processus appelant sont remplaces par ceux du programme charge. Le programme invoque herite du PID du processus appelant, et de tous les descripteurs de fichiers qui ne possedent pas le drapeau Close-on-Exec. Les signaux en attente destines au processus parent sont effaces. Si l'on effectuait un ptrace(2) sur le programme appelant, un signal SIGTRAP est envoye apres la reussite de execve(). Si l'executable est un fichier binaire lie dynamiquement, et contenant des appels aux bibliotheques partagees, le linker dynamique de Linux ld.so(1) est appele avant l'execution, afin de charger les bibliotheques partagees necessaires en memoire, et d'effectuer l'edition des liens de l'executable.

VALEUR RENVOYEE
En cas de reussite, execve() ne revient pas, en cas d'echec il renvoie -1 et errno contient le code d'erreur.

ERREURS

EACCES
    Le fichier specifie n'est pas un fichier regulier.

EACCES
    L'execution du fichier specifie n'est pas autorisee.

EPERM
    Le systeme de fichiers est monte avec l'attribut noexec.

EPERM
    le systeme de fichiers est monte avec l'attribut nosuid et le fichier a un bit Set-UID ou Set-GID positionne.

E2BIG
    La liste d'arguments est trop grande

ENOEXEC
    Le "nombre magique" du fichier est invalide.

EFAULT
    filename pointe en dehors de l'espace d'adressage accessible.

ENAMETOOLONG
    filename est trop long

ENOENT
    Le fichier n'existe pas

ENOMEM
    Pas assez de memoire pour le noyau.

ENOTDIR
    Un element du chemin d'acces n'est pas un repertoire.

EACCES
    L'acces a un element du chemin n'est pas autorise.

ELOOP
    filename contient une reference circulaire (a travers un lien symbolique) ETXTBUSY Le fichier executable a ete ouvert en ecriture par un ou plusieurs processus.

CONFORMITE
SVr4, SVID, X/OPEN, BSD 4.3. POSIX ne documente pas le comportement avec #! mais est neanmoins compatible. SVr4 decrit des erreurs supplementaires EAGAIN, EINTR, ELIBACC, ENOLINK, EMULTIHOP; POSIX ne decrit pas les conditions d'erreur ETXTBSY, EPERM or ENOMEM.

NOTES
Les processus Set-UID et Set-GID ne peuvent pas etre suivis par ptrace() en positionnant effectivement leur UID ou leur GID. La premiere ligne d'un shell script executable (#!) a une longueur maximale de 127 caracteres.

VOIR AUSSI
ld.so(1), execl(3), fork(2)