在 C 中传递给 execv 的参数

Arguments being passed into execv in C

我正在用 C 编写一个程序,该程序分叉并使用 execv 调用传递给原始函数的命令。

所以我会输入类似“./program echo "hello"”的内容,我程序中的分支的子项将使用 bash 命令 "echo hello".

execv 手册页非常含糊,它说 "The first argument, by convention, should point to the filename associated with the file being executed." 我想弄清楚我是否理解正确。

从我见过的例子来看,execv 应该这样调用:

execv(argv[0], argv);

但我知道 argv[0] 只包含“./program”。所以我认为这只是 exec 对其内部的相同功能,但这不是我在示例中看到的。

据我所知应该是这样的:

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

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

谁能帮我理解一下?谢谢

execv 的第一个参数是要执行的应用程序。 "/bin/echo" -- 您可能不想依赖环境变量的可用性来查找您的应用程序,因此最好使用完整路径。

execv 的第二个参数是一个 NULL 终止的常量字符串数组,重复第一个参数的“/bin/echo”,因此:

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

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