代码改变世界

execl函数 参数问题

2015-03-07 22:01  GreyYang  阅读(1121)  评论(0)    收藏  举报

函数定义:

int execl(const char *path, const char *arg, ...);

该函数用户进程操作,linux下包含于头文件#include <unistd.h>

函数说明:path表示执行操作的文件路径,后面的不定参数列表为执行该文件时传递过去的参数,最后一个参数需要是NULL来结束。

一个经典例子:

1 #include<unistd.h>
2 main()
3 {
4     execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,(char * )0);
5 }

但是,例子中第二个参数并没有被传递过去跟在/bin/ls后执行,而是重写传入了要执行的文件的名字。但是在第一个参数中要被执行的文件名已经非常清除,为何要传入第二个冗余的参数呢?

根据APUE上的解释:我们将第一个参数(argv[0])设置为路径名的文件名分量,某些shell将此参数设置为完全的路径名,这只是一个惯例,我们可以将其设置成任何值。

那么第二个参数会产生什么影响吗?会,它会影响进程名,用ps -ef查看即可验证。