【发布时间】:2018-10-16 23:30:33
【问题描述】:
我正在尝试运行一个简单的 C 程序,该程序执行带有一些参数的命令:
ls -l -a -i
我搜索了有关 exec 家族的信息,但不了解所有不同的 exec 调用以及使用哪个调用。
我的程序是:
int main(int argc, char **argv)
{
const char *cmd = "ls";
const char *args[3];
args[0] = "-l";
args[1] = "-a";
args[2] = "-i";
execv(cmd, args); /* this line does not work */
return 0;
}
我认为execv 的调用方式为:
-
char *cmd作为命令 -
char *args[]作为参数
但是我在所有不同的组合和尝试中都遇到了错误。
【问题讨论】:
-
来自man execv():“参数列表必须以 NULL 指针终止,”(正如 @mch 所说,但这可能“仅”导致编译器警告......无论如何都要认真对待)
-
也回想一下你自己是如何处理参数的,
argv[0]是什么?您传递的args数组就是该程序中的argv数组。 -
和阅读手册页,
cmd到execv是要执行的程序的路径。如果要在$PATH中执行程序,请使用execvp。并且不要忘记exec替换您正在运行的程序。 -
char *args[] = { "ls", "-l", "-a", "-i", 0 }; execv("/bin/ls", args);