参数在C中传递给execv

时间:2017-09-19 21:06:56

标签: c execv

我正在用C语言编写一个程序,它使用execv来调用传入原始函数的命令。

所以我会键入类似" ./ program echo" hello""而我程序中fork的子代将使用bash命令" echo hello"。

execv手册页非常模糊,它说"按照惯例,第一个参数应该指向与正在执行的文件相关联的文件名。"我想知道我是否理解这一点。

从我看过的例子中,这就是应该如何调用execv:

execv(argv[0], argv);

但我知道argv [0]只包含" ./ program"。所以我认为这只是执行它内部的相同功能,但它不是我在例子中看到的。

据我所知,它应该是这样的:

execv(argv[1],argv+1);

execv(argv[1],argv+2);

任何人都可以帮我理解这个吗?感谢。

1 个答案:

答案 0 :(得分:0)

execv的FIRST参数是exec的应用程序。 “/ bin / echo” - 您可能不希望依赖环境变量的可用性来查找您的应用程序,因此首选完整路径。

execv的SECOND参数是一个以NULL结尾的const字符串数组,重复第一个参数的“/ bin / echo”,所以:

char *const params = { "/bin/echo", "hello", NULL };

execv("/bin/echo", params);