Il n'y a pas de exec appel système -- ceci est généralement utilisé pour faire référence à tous les execXX appels en groupe. Ils font tous essentiellement la même chose :charger un nouveau programme dans le processus en cours et lui fournir des arguments et des variables d'environnement. Les différences résident dans la manière dont le programme est trouvé, la manière dont les arguments sont spécifiés et la provenance de l'environnement.
-
Les appels avec
vdans le nom prendre un paramètre tableau pour spécifier leargv[]tableau du nouveau programme. La fin des arguments est indiquée par un élément de tableau contenantNULL. -
Les appels avec
ldans le nom prend les arguments du nouveau programme comme une liste d'arguments de longueur variable à la fonction elle-même. La fin des arguments est indiquée par un(char *)NULLdispute. Vous devez toujours inclure le cast de type, carNULLest autorisé à être une constante entière, et les conversions d'arguments par défaut lors de l'appel d'une fonction variadique ne le convertiront pas en pointeur. -
Les appels avec
edans le nom prendre un argument supplémentaire (ou des arguments dans lelcas) pour fournir l'environnement du nouveau programme ; sinon, le programme hérite de l'environnement du processus courant. Ceci est fourni de la même manière que leargvarray :un tableau pourexecve(), arguments séparés pourexecle(). -
Les appels avec
pdans le nom chercher lePATHvariable d'environnement pour trouver le programme s'il ne contient pas de répertoire (c'est-à-dire qu'il ne contient pas de/personnage). Sinon, le nom du programme est toujours traité comme un chemin vers l'exécutable. -
FreeBSD 5.2 a ajouté une autre variante :
execvP(avec majusculeP). C'est commeexecvp(), mais au lieu d'obtenir le chemin de recherche à partir duPATHvariable d'environnement, c'est un paramètre explicite de la fonction :
int execvP(const char *file, const char *search_path, char *const argv[]);
Utilisez man exec et lisez :
The execv(), execvp(), and execvpe() functions provide an array of pointers to
null-terminated strings that represent the argument list available to the new program.
The first argument, by convention, should point to the filename associated with the file
being executed. The array of pointers must be terminated by a NULL pointer.
execv
int execv(const char *path, char *const argv[]);
Vous passez donc un tableau en paramètre
int execle(const char *path, const char *arg,
..., char * const envp[]);
Presque la même chose, mais pas sous forme de tableau, mais plutôt sous forme de liste de valeurs (chaînes), suivie d'un tableau qui désigne l'environnement.
Ici :
int execvp(const char *file, char *const argv[]);
Vous appelez un fichier, sans chemin, il s'attend donc à ce que vous soyez déjà dans le bon path avant d'appeler.
Dernier point mais non le moindre :
int execve(const char *filename, char *const argv[],
char *const envp[]);
Semblable au précédent, mais vous avez maintenant deux tableaux, pour les arguments et les variables d'environnement.
Puisque toutes ces fonctions appartiennent à la famille exec(), laissez-moi differentiate selon extra characters avec les significations,
1.execve ():
p :absent => le nom du programme à exécuter sera tiré de pathname
v :présent => l'argument sera passé sous la forme array
e :present => l'environnement sera repris de envp argument
2.execfichier ():
p :absent => le nom du programme à exécuter sera tiré de pathname
l :présent => l'argument sera passé sous la forme list
e :present => l'environnement sera repris de envp argument
3.execlp ():
p :présent => le nom du programme à exécuter sera tiré de filename spécifié ou le système search for program file en PATH variable.
l :présent => l'argument sera passé sous la forme list
e :absent => l'environnement sera extrait de caller's environ
4.execvp ():
p :présent => le nom du programme à exécuter sera tiré de filename spécifié ou le système search for program file en PATH variable.
v :présent => l'argument sera passé sous la forme array
e :absent => l'environnement sera extrait de caller's environ
5.execv ():
p :absent => le nom du programme à exécuter sera extrait de pathname
v :présent => l'argument sera passé sous la forme array
e :absent => l'environnement sera extrait de caller's environ
6.execl ():
p :absent => le nom du programme à exécuter sera tiré de pathname
l :présent => l'argument sera passé sous la forme list
e :absent => l'environnement sera extrait de caller's environ