Comment execvp exécuter une commande?

je sais execvp peut être utilisé pour exécuter des commandes simples comme suit:

char* arg[] = {"ls", "-l", NULL};
execvp(arg[0],arg);

je veux savoir ce qui se passe ici, quand je lance execvp. Dans la page de manuel il est dit execvp remplace l'image de l'image de processus avec le nouveau. Cependant ici, j'exécute une commande qui n'est pas un exécutable.

pour être précis, disons qu'il y a une commande qui requiert spécifiquement une entrée par exemple cat. Si j'ai un fichier texte texte.txt qui contient le nom de fichier attendu pour cat et I rediriger stdin pour le flux de fichier du fichier, la sortie de execle("cat","cat",NULL) ou execvp("cat", arg) (évidemment où arg stocke "cat" et NULL) résulte en la sortie dans la console comme le cat /filename? Mon intuition est que je dois lire le fichier et peut-être l'analyser pour stocker les arguments dans l'arg. Cependant je tiens à vous assurer.

Merci d'avance!

21
demandé sur laxonline 2013-01-13 11:03:21

4 réponses

Voici ce qui se passe dans un execvp appel:

  1. votre mise en œuvre libc recherche PATH, le cas échéant, pour le fichier qui doit être exécutée. La plupart, si ce n'est la totalité, des commandes dans les systèmes de type UNIX sont exécutables. Que se passera-t-il si ce n'est pas le cas? Essayer. Jetez un oeil à comment glibc n'.
  2. Typiquement, si l'exécutable est trouvé, un appel à