2017-06-17 2 views
-1

J'ai des doutes sur la façon de lancer C un execv de bc. Comment les paramètres devraient-ils être transmis (par exemple: 3, +, 2)? Serait-ce pour un tuyau? Ou par l'argv malgré être int? Et, si cet exec était lancé par l'enfant, le parent pourrait-il collecter cette valeur avec une lecture du tuyau? Merci!execvp ("/ usr/bin/bc", arg, env)

+1

Depuis 'bc' prend les noms de fichiers comme arguments, vous devez soit organiser' 3 + 2' pour être envoyé à son entrée standard (pipe?) ou écrire '3 + 2' dans un fichier et dire' bc' pour traiter le fichier (et supprimer le fichier plus tard). L'appel système 'execvp()' ne prend que deux arguments, normalement 'execvp (argv [0], argv)' pour un vecteur de chaînes de caractères nul-terminé. La valeur de 'argv [0]' sera 'bc' - si vous spécifiez le chemin, il ne sert à rien d'utiliser' execvp() 'au lieu de' execv() '. –

+0

Merci beaucoup !! Je mets ceci: sprintf (str1, "% d", num1); \t \t sprintf (strop, "% d", operando); \t \t sprintf (str2, "% d", num2); \t \t strcat (str, str1); \t \t strcat (str, strop); \t \t strcat (str, str2); \t \t char * argumentos [] = {"bc", str}; Execvp ("/ usr/bin/bc", argumentos) \t \t Le ferais-tu? Avant d'essayer de passer à travers un tuyau les valeurs 3 + 2, j'ai aussi essayé de créer un fichier auxiliaire où j'ai écrit 3 + 2 et passé ce fichier à l'exec de bc .... En aucun cas j'ai réussi à récupérer la valeur du résultat dans le parent. Des idées? Je vous remercie. – ssuarez

+0

@ssuarez: sur le côté droit de cette page, vous devriez voir une section intitulée ** "Related" **, et vous y trouverez probablement cette [question] (https://stackoverflow.com/questions/40995172/écriture-un-terme-à-bc-via-pipes-in-c). Consultez la réponse acceptée. Il est toujours bon de regarder les questions connexes :) – rici

Répondre

0

L'argument doit être une chaîne. Idem que si les arguments avaient été tapés dans un terminal. Si vous avez plusieurs arguments entiers, vous devez d'abord les convertir en une représentation de chaîne. Quant à env, vous pouvez passer le env vous avez obtenu dans main(), ou un environnement vide comme dans:

char *env[] = { NULL }; 
+0

L'argument de 'bc' est un nom de fichier, pas une expression. – rici

+0

Pour une raison quelconque, l'OP mentionne le passage "3, +, 2". –

+1

Si l'OP savait faire ce qu'il voulait faire, il ne poserait pas de question ici. :) 'execvp' ne prend pas non plus un argument' env'; vous avez besoin de 'execvpe' si vous voulez passer un environnement, mais dans ce cas il n'y a pas grand besoin. – rici