execvp参数

Chr*_*ner 4 c unix exec

Helllo大家,

我有这个示例代码:

pid = fork();
if (pid == 0) {
   execvp(argv[2],&argv[2]);
   perror("Error");
}else {
wait(NULL);

}  
Run Code Online (Sandbox Code Playgroud)

man exec我所知

"按照惯例,第一个参数应该指向与正在执行的文件相关联的文件名".

所以,如果我以这种方式执行我的程序:

./a.out 5 ls
Run Code Online (Sandbox Code Playgroud)

命令ls将被执行.

第二个论点怎么样?手册说

"指针数组必须以NULL指针终止"

我在这里看不到NULL指针,也没有说明&argv[2]这里的功能是什么.

非常感谢你!

jwo*_*der 7

第二个参数execvpchar*将成为结果进程的s 数组argv.为了execvp知道这个数组有多长,最后一个"真实"元素必须跟着NULL,例如,为了{"foo", "bar"}作为new 传递argv,第二个参数execvp必须引用数组{"foo", "bar", NULL}.在你的情况下,由于argv传递给你的程序的数组main已经被NULL它自己的一个条目终止,你可以直接传递&argv[2]给它execvp而不必自己添加NULL.