[结贴]我感觉execl的第一个参数和第二个参数有重叠,帮我看一下吧
本帖最后由 cdsfiui 于 2015-02-04 18:15 编辑如题,我学习了一下execl函数的用法:
#include<unistd.h>
int main()
{
execl("ls", "ls", "-al");
return 0;
}
OK,什么也不打印,于是我改了一下:
#include<unistd.h>
int main()
{
execl("/bin/ls", "ls", "-al", 0);
return 0;
}
很奇怪啊,execl第一个参数必须是path,我如果把调用语句改成execl("/bin", "ls", "-al", 0);
发现也不行。那岂不是说这个path参数必须包含可执行程序的名字本身? 可是这样的话,execl的第二个参数就是文件名啊,第二个参数岂不是多余了?
非常疑惑,求解释! 乌龟的臀部,规定 第1个参数是里子,第2个参数是面子! 爻易 发表于 2015-02-04 14:29 static/image/common/back.gif
第1个参数是里子,第2个参数是面子!
path里面包含了file的名字,那还要第二个file参数干什么呢? 感觉多余 第2个参数将传给进程,也就是argv 进程可以通过查看面子有多大,就能看人下菜碟-哦是随机应变了! 爻易 发表于 2015-02-04 14:36 static/image/common/back.gif
第2个参数将传给进程,也就是argv
果然是高手!我验证了你的说法,第二个参数是argv,可以是任何东西,不必是可执行文件名。程序如下:
$ cat s.cpp
#include<stdio.h>
int main(int argc, char* argv[])
{
for(int i=0;i<argc;++i)
printf("%s\n",argv);
return 0;
}
$ g++ s.cpp -o s.bin
$ cat exec.cpp
#include<unistd.h>
int main()
{
execl("./s.bin", "myself", "p1", "p2", 0);
return 0;
}
$ g++ exec.cpp && ./a.out
myself
p1
p2
页:
[1]