Je dois exécuter une commande UNIX avec des arguments différents dans une boucle. Maintenant, je me demande si je devrais utiliser ExecVP (), en passant dans la CMD et les arguments, ou utilisez le système, construisant une chaîne composée de cmd + args? P>
3 Réponses :
Le Puisque vous faites cela dans une boucle, je suppose que vous ne voulez pas remplacer le processus d'origine. Par conséquent, je vous suggère d'essayer d'aller avec le système EXEC CODE> La famille de fonctions remplacera le processus en cours par un nouveau, tandis que
système code> surchargera le nouveau processus, puis attendez qu'il puisse finir. Lequel utiliser dépend de ce que vous voulez. P>
code>. P>
Le système soumet également la ligne à l'analyse de la ligne de commande, ce qui pourrait ouvrir des trous pour les attaques d'injection.
J'ai cherché des tutoriels à ce sujet sur le Web et la plupart des exemples sont un nouveau processus et que remplacé la fourchette avec ExecVP (). Après cela, le processus parent attendu que le processus d'enfant ait fini. Est-ce essentiellement quel système () fait?
Oui, c'est essentiellement ce que système () code> fait. Calling
System () code> exécute également la coque par défaut et transmet votre programme comme argument, qui créera un peu plus de frais généraux.
J'utiliserais Execvp uniquement si je ne peux pas réaliser ce que je veux avec système. Notez que pour obtenir l'équivalent du système, vous devez également avoir besoin de la manipulation des signaux. P>
Eh bien, les autres réponses sont principalement em> correctes. Système, tandis que non seulement Donc, à moins que vous ne vouliez vraiment qu'une coquille (pour analyse de paramètres et similaires) est beaucoup em> plus efficace pour faire quelque chose comme: p> Fourche code> s, puis
exécuté code> s, il ne 'T
EXEC code> Votre processus, il exécute la coque par défaut, qui transmettez votre programme en tant qu'argument. p>