2017-06-17 56 views
-1

我怀疑如何在C中执行一个exec任务。应该如何传递参数(例如:3,+,2)?它会用于管道吗?或者由argv尽管是int?而且,如果这个执行是由孩子抛出的,那么父母是否会从管道中读取该值? 谢谢!execvp(“/ usr/bin/bc”,arg,env)

+1

由于'bc'需要文件名作为参数,你要么必须为'3 + 2'安排发送到它的标准输入(pipe?),或者将'3 + 2'写入文件并告诉'bc'处理文件(并在稍后删除文件)。 'execvp()'系统调用只需要两个参数,通常是'execvp(argv [0],argv)',用于某些以NULL结尾的字符串向量。 'argv [0]'的值将是'bc' - 如果指定了路径,那么使用'execvp()'而不是'execv()'没有意义。 –

+0

非常感谢! 我把这个: 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 * argumentsos [] = {“bc”,str}; \t \t execvp(“/ usr/bin/bc”,argumentsos); 会吗?在我尝试通过一个管道的值3 + 2之前,我还尝试创建一个辅助文件,在那里我写了3 + 2并将该文件传递给了BC的执行程序....在任何情况下,我都设法恢复父级结果的值。有任何想法吗?谢谢。 – ssuarez

+0

@ssuarez:在这个页面的右边,你会看到一个标有**“Related”**的部分,你可能会发现这个[question](https://stackoverflow.com/questions/40995172 /写入-A-术语到BC-通管式-C)。查看接受的答案。查看相关问题总是很好:) – rici

回答

0

arg应该是一个字符串。就像参数在终端中输入一样。如果您有多个整数参数,则必须先将它们转换为字符串表示形式。至于env,你可以通过你在main()得到了env,或一个空的环境,如:

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

“bc”的参数是文件名,而不是表达式。 – rici

+0

出于某种原因,OP提及通过“3,+,2”。 –

+1

如果OP知道如何做他们想做的事,他们就不会在这里问一个问题。 :)'execvp'也不会带'env'参数;如果你想传递一个环境,你需要'execvpe',但是在这种情况下没有太多需要。 – rici