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
v
dans 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
l
dans 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 *)NULL
dispute. Vous devez toujours inclure le cast de type, carNULL
est 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
e
dans le nom prendre un argument supplémentaire (ou des arguments dans lel
cas) 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 leargv
array :un tableau pourexecve()
, arguments séparés pourexecle()
. -
Les appels avec
p
dans le nom chercher lePATH
variable 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 duPATH
variable 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