EXECVE(2)          Manuel du programmeur Linux          EXECVE(2)


NOM
       execve - Exécuter un programme.

SYNOPSIS
       #include <unistd.h>

       int execve (const char *fichier, char * constargv [], char
       * constenvp[]);

DESCRIPTION
       execve() exécute le programme  correspondant  au  fichier.
       Celui-ci doit être un exécutable binaire ou bien un script
       commençant par une ligne du type "#! interpreteur  [arg]".
       Dans  ce dernier cas, l'interpréteur doit être indiqué par
       un nom complet, avec  son  chemin  d'accès,  et  qui  sera
       invoqué sous la forme interprèteur [arg] fichier.

       En  cas de réussite, execve() ne revient pas à l'appelant,
       et les segments de texte, de données, ainsi que la pile du
       processus  appelant  sont  remplacés par ceux du programme
       chargé.  Le programme invoqué hérite du PID  du  processus
       appelant,  et  de tous les descripteurs de fichiers qui ne
       possèdent pas le drapeau  Close-on-Exec.  Les  signaux  en
       attente  destinés  au  processus  parent sont effacés. Les
       signaux prêts à être intercepté par  le  processus  parent
       reprennent leur comportement par défaut.

       Si l'on effectuait un ptrace(2) sur le programme appelant,
       un  signal  SIGTRAP  est  envoyé  après  la  réussite   de
       execve().

       Si   l'exécutable   est   un  fichier  binaire  a.out  lié
       dynamiquement, et contenant des appels  aux  bibliothèques
       partagées,  le  linker  dynamique  de  Linux  ld.so(1) est
       appelé  avant  l'exécution,  afin  de  charger  les   bib­
       liothèques    partagées   nécessaires   en   mémoire,   et
       d'effectuer l'édition des liens de l'exécutable.

       Si l'éxécutable  est  au  format  ELF  lié  dynamiquement,
       l'interprèteur  indiqué  dans  le  segment  PT_INTERP sera
       invoqué pour  charger  les  bibliothèques  partagées.  Cet
       interprèteur  est généralement /lib/ld-linux.so.1 pour les
       fichiers binaires liés avec la libc Linux  version  5,  ou
       /lib/ld-linux.so.2 pour ceux liés avec la GNU libc version
       2.

VALEUR RENVOYÉE
       En cas de  réussite,  execve()  ne  revient  pas,  en  cas
       d'échec  il renvoie -1 et errno contient le code d'erreur.

ERREURS
       EACCES Le fichier n'est pas un fichier régulier.

       EACCES L'exécution du fichier n'est pas autorisée.



Linux 2.0.30             10 Décembre 1997                       1





EXECVE(2)          Manuel du programmeur Linux          EXECVE(2)


       EPERM  Le système de fichiers est  monté  avec  l'attribut
              noexec.

       EPERM  Le  système  de  fichiers est monté avec l'attribut
              nosuid et le fichier a un bit  Set-UID  ou  Set-GID
              positionné.

       E2BIG  La liste d'arguments est trop grande.

       ENOEXEC
              Le fichier éxécutable n'est pas dans le bon format,
              ou est destiné à une autre architecture.

       EFAULT L'argument fichier pointe  en  dehors  de  l'espace
              d'adressage accessible.

       ENAMETOOLONG
              La chaîne de caractères fichier est trop longue.

       ENOENT Le fichier n'existe pas.

       ENOMEM Pas assez de mémoire pour le noyau.

       ENOTDIR
              Un  élément  du  chemin d'accès n'est pas un réper­
              toire.

       ELOOP  Le chemin d'accès au fichier contient une référence
              circulaire (à travers un lien symbolique)

       ETXTBUSY
              Le  fichier exécutable a été ouvert en écriture par
              un ou plusieurs processus.

       EIO    Une erreur d'entrée/sortie de bas-niveau s'est pro­
              duite.

       ENFILE Le  nombre  maximal  de  fichiers  ouverts  sur  le
              système est atteint

       EMFILE Le nombre maximal de fichiers ouverts par processus
              est atteint.

       EINVAL Un  exécutable  ELF  a plusieurs segments PT_INTERP
              (indique plusieurs interprèteurs).

       EISDIR L'interprèteur ELF cité est un répertoire.

       ELIBBAD
              L'interprèteur ELF mentionné n'est pas dans un for­
              mat connu.

CONFORMITÉ
       SVr4,  SVID,  X/OPEN,  BSD 4.3.  POSIX ne documente pas le



Linux 2.0.30             10 Décembre 1997                       2





EXECVE(2)          Manuel du programmeur Linux          EXECVE(2)


       comportement avec #! mais est néanmoins  compatible.  SVr4
       décrit des erreurs supplémentaires EAGAIN, EINTR, ELIBACC,
       ENOLINK, EMULTIHOP; POSIX ne  décrit  pas  les  conditions
       d'erreur  ETXTBSY,  EPERM,  EFAULT,  ELOOP,  EIO,  ENFILE,
       EMFILE, EINVAL, EISDIR, ni ELIBBAD.

NOTES
       Les processus Set-UID  et  Set-GID  ne  peuvent  pas  être
       suivis par ptrace() en positionnant effectivement leur UID
       ou leur GID.

       La première ligne d'un shell script exécutable (#!) a  une
       longueur maximale de 127 caractères.

       Linux  ignore les bits Set-UID et Set-GID sur les scripts.

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


TRADUCTION
       Christophe Blaess, 1997.



































Linux 2.0.30             10 Décembre 1997                       3