execvp arguments
Helllo tout le monde,
J'ai ce code d'exemple:
pid = fork();
if (pid == 0) {
execvp(argv[2],&argv[2]);
perror("Error");
}else {
wait(NULL);
}
De man exec
je comprends que
" Le premier argument, par convention, doit pointer vers le nom de fichier
associé avec le fichier en cours d'execution".
Donc, si j'execute mon programme de cette façon:
./a.out 5 ls
La commande ls sera exécuté.
Que la deuxième argument? le manuel dit
"Le tableau de pointeurs doit être terminée par un pointeur NULL"
et je ne vois pas un pointeur NULL ici, ni je understan quelle est la fonction de &argv[2]
ici.
Merci beaucoup!
OriginalL'auteur Christian Wagner | 2011-06-08
Vous devez vous connecter pour publier un commentaire.
Le deuxième argument de
execvp
est la matrice dechar*
s qui deviendra le processus qui en résulte estargv
. Pourexecvp
savoir combien de temps ce tableau, le dernier "vrai" élément doit être suivie parNULL
, par exemple, afin de passer à{"foo", "bar"}
que la nouvelleargv
, le deuxième argument deexecvp
doit se référer à la matrice de{"foo", "bar", NULL}
. Dans votre cas, comme leargv
tableau passé à votre programmemain
est déjà résiliée par l'uneNULL
entrée de son propre, vous pouvez passer&argv[2]
àexecvp
directement, sans avoir à ajouter sur unNULL
vous-même.OriginalL'auteur jwodder
Lorsque vous exécutez une.hors, il a très probablement un
main
comme ceci:Donc, quand vous êtes de passage à
argv[2]
àexecvp
tout est en place, mais le tableau commence à 2 (qui commence parls
).OriginalL'auteur cnicutar