函数定义:
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查看即可验证。
时间: 2024-10-21 03:19:35