Question

J'utilise execv() pour exécuter des commandes à partir de / bin / tels que 'ls', 'PWD', 'echo' de mon programme C ++, et je me demande quelle valeur je fournir argv [0];

const char * path = getPath();
char ** argv = getArgs();

execv(path,argv);
Était-ce utile?

La solution

argv[0] est censé être le nom du programme. Il est passé à la fonction main du programme. Certains programmes se différencient leur comportement en fonction de ce que la chaîne est argv[0]. Par exemple, le shell bash GNU désactivera certaines de ses fonctions si elle est appelée à l'aide sh au lieu de bash. Meilleur donner la même valeur que vous passez à path.

Dans linux, argv[0] est le nom du processus affiché par l'utilitaire top (dont il tire probablement entrées dans la lecture /proc/)

Autres conseils

argv [0] doit être le chemin complet de la commande que vous souhaitez exécuter.

Je sais que ce n'est pas la réponse que vous cherchez, mais est-il une raison particulière pour laquelle vous faites cela? La raison pour laquelle je demande est que la plupart sinon la totalité des actions des gens courir normalement soit system() ou execv() sont disponibles dans les bibliothèques sur Windows ou Unix et sont plus sûrs, plus rapides et moins susceptibles de souffrir de circonstanciels erreurs . Par cela, je veux dire, par exemple, lorsque les changements de PATH et tout à coup votre code cesse de fonctionner.

Si vous passez dans une chaîne, que ce soit en tout ou en partie, et en cours d'exécution, alors vous laissez aussi vous ouvrir à un utilisateur d'accéder au système en entrant une commande qui pourrait être dommageable. Par exemple. Imaginez que vous avez mis en place une recherche de fichier en utilisant find /home -name et vos types d'utilisateur dans:

"%" -exec rm {} \;

Aïe!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top