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]这里的功能是什么.
非常感谢你!
第二个参数execvp是char*将成为结果进程的s 数组argv.为了execvp知道这个数组有多长,最后一个"真实"元素必须跟着NULL,例如,为了{"foo", "bar"}作为new 传递argv,第二个参数execvp必须引用数组{"foo", "bar", NULL}.在你的情况下,由于argv传递给你的程序的数组main已经被NULL它自己的一个条目终止,你可以直接传递&argv[2]给它execvp而不必自己添加NULL.
| 归档时间: |
|
| 查看次数: |
20139 次 |
| 最近记录: |