Votre IP: 38.107.191.116 
  
 
Google
 
Accueil e-mail Linux
Linux
Perl
Perl
C
Langage C
Dico
Dictionnaire
Biblio liens
Bibliothèque de liens
Index articles
Index articles
 

Date création : 27-03-2008 20:23:44

Linux  Vous êtes dans : GNU/Linux Astuces / Pages man [Section2 - Appels système]


EXECVE

 

Index

  1. NOM
  2. SYNOPSIS
  3. DESCRIPTION
  4. VALEUR RENVOYÉE
  5. ERREURS
  6. CONFORMITÉ
  7. NOTES
  8. HISTORIQUE
  9. VOIR AUSSI
  10. TRADUCTION

 

NOMIndex

execve - Exécuter un programme  

SYNOPSISIndex

#include <unistd.h>
int execve(const char *filename, char * const argv [],
char *const envp[]);  

DESCRIPTIONIndex

execve() exécute le programme correspondant au fichier filename. Celui-ci doit être un exécutable binaire ou bien un script commençant par une ligne du type « #! interpréteur [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] filename.
argv est un tableau de chaînes d'arguments passées au nouveau programme. envp est un tableau de chaînes, ayant par convention la forme clé=valeur, qui sont passées au nouveau programme comme environnement. argv ainsi que envp doivent se terminer par un pointeur NULL. Les arguments et l'environnement sont accessibles par le nouveau programme dans sa fonction principale, lorsqu'elle est définie comme int main (int argc, char *argv[], char *envp[]).
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 appelant sont effacés. Les signaux prêts à être intercepté par le processus appelant reprennent leur comportement par défaut. Le signal SIGCHLD (lorsqu'il est configuré sur SIG_IGN) peut ou non être réinitialisé à SIG_DFL.
Si l'on effectuait un ptrace(2) sur le programme appelant, un signal SIGTRAP est envoyé après la réussite de execve().
Si le bit Set-UID est positionné sur le fichier filename, et si le programme n'est pas tracé, l'UID effectif du processus appelant est modifié pour prendre celui du propriétaire du fichier. De même, lorsque le bit Set-GID est positionné, le GID effectif est modifié pour correspondre à celui du groupe du fichier.
L'UID effectif du processus est copié dans le Set-UID sauvé ; de la même manière, le GID effectif est copié dans le Set-GID sauvé. Ces copies ont lieu après toute modification d'ID effectif à cause des bits de permission Set-UID et Set-GID.
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(8) est appelé avant l'exécution, afin de charger les bibliothèques partagées nécessaires en mémoire et d'effectuer l'édition des liens de l'exécutable.
Si l'exé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ÉEIndex

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

ERREURSIndex

E2BIG
Le nombre total d'octets dans l'environnement (envp) et la liste d'arguments (argv) est trop grand.
EACCES
La permission de parcours est refusée pour un des composants du chemin filename ou du nom d'un interpréteur de script. (Voir aussi path_resolution(2).)
EACCES
Le fichier ou l'interpréteur de script n'est pas un fichier régulier.
EACCES
L'autorisation d'exécution est refusée pour le fichier, ou un interpréteur de script, ou un interpréteur ELF.
EACCES
Le système de fichiers est monté avec l'option noexec.
EFAULT
L'argument filename pointe en dehors de l'espace d'adressage accessible.
EINVAL
Un exécutable ELF a plusieurs segments PT_INTERP (indique plusieurs interpréteurs).
EIO
Une erreur d'entrée-sortie s'est produite.
EISDIR
L'interpréteur ELF cité est un répertoire.
ELIBBAD
L'interpréteur ELF mentionné n'est pas dans un format connu.
ELOOP
Le chemin d'accès au fichier, ou à un interpréteur de script, ou à un interpréteur ELF, contient une référence circulaire (à travers un lien symbolique)
EMFILE
Le nombre maximal de fichiers ouverts par processus est atteint.
ENAMETOOLONG
La chaîne de caractères filename est trop longue.
ENFILE
La limite du nombre total de fichiers ouverts sur le système a été atteinte.
ENOENT
Le fichier filename ou un script ou un interpréteur ELF n'existe pas, ou une bibliothèque partagée nécessaire pour le fichier ou l'interpréteur n'est pas disponible.
ENOEXEC
Le fichier exécutable n'est pas dans le bon format, ou est destiné à une autre architecture.
ENOMEM
Pas assez de mémoire pour le noyau.
ENOTDIR
Un élément du chemin d'accès au fichier filename, à un script ou à un interpréteur ELF, n'est pas un répertoire.
EPERM
Le système de fichiers est monté avec l'attribut nosuid et le fichier a un bit Set-UID ou Set-GID positionné.
EPERM
Le processus est suivi avec ptrace(2), l'utilisateur n'est pas le superutilisateur, et le fichier a un bit Set-UID ou Set-GID activé.
ETXTBSY
Un exécutable a été ouvert en écriture par un ou plusieurs processus.
 

CONFORMITÉIndex

SVr4, BSD 4.3, POSIX.1-2001. POSIX.1-2001 ne documente pas le comportement avec « #! » mais est néanmoins compatible.  

NOTESIndex

Les processus Set-UID et Set-GID ne peuvent pas être suivis par ptrace().
Linux ignore les bits Set-UID et Set-GID sur les scripts.
Le résultat d'un montage de système de fichiers avec l'attribut nosuid peut varier suivant les versions de noyau : certaines refuseront l'exécution des fichiers SUID/SGID lorsque cela donnerait à l'appelant des privilèges qu'il n'a pas (et renverront l'erreur EPERM), d'autres ignoreront simplement les bits SUID/SGID mais accepteront d'effectuer l'appel exec().
La première ligne d'un shell script exécutable (#!) a une longueur maximale de 127 caractères.
 

HISTORIQUEIndex

Avec Unix V6, la liste des arguments d'un appel exec() se terminait par 0, alors que la liste des arguments de main se terminait par -1. Aussi, cette liste d'arguments n'était pas utilisable directement dans un appel exec() supplémentaire. Depuis Unix V7, les deux terminateurs sont NULL.
 

VOIR AUSSIIndex

chmod(2), fork(2), path_resolution(2), ptrace(2), execl(3), fexecve(3), environ(7), ld.so(8).  

TRADUCTIONIndex

Cette page de manuel a été traduite et mise à jour par Christophe Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006.
La traduction de cette page de manuel est basée sur les traductions disponibles sur http://manpagesfr.free.fr/, mais est gérée par l'équipe francophone de traduction de Debian au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction 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> ».


Création : octobre 2007  © Tous droits réservés 2007 linux-perl-c
Valid HTML 4.01 TransitionalValid CSS