exec函数簇
在Linux中进程要使用exec函数族来启动另一个程序的执行。系统调用execve()对当前进程进行替换,替换者为一个指定的程序,其参数包括文件名(filename)、参数列表(argv)以及环境变量(envp)。exec函数族当然不止一个,但它们大致相同,在 Linux中,它们分别是:execl,execlp,execle,execv,execve和execvp。
一个进程一旦调用exec类函数,它本身就"死亡"了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统而言,还是同一个进程,不过已经是另一个程序了。(不过exec类函数中有的还允许继承环境变量之类的信息。)
1.execl
函数的作用:执行文件
函数的原型:int execl(const char *path,const char *arg,…);
返 回 值:成功:函数不返回
失败:函数返回-1
#include <unistd.h>
int main()
{
execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,NULL);
return 0;
}
2.execlp
函数的作用:从path环境变量中查找文件执行
函数的原型:int execlp(const char *file,const char *arg,…);
返 回 值:成功:函数不返回
失败:函数返回-1
3.execv
函数的作用:执行文件
函数的原型:int execv(const char *path,char * const argv[]);
函数的参数:path:代表的文件路径
argv:是一个数组里指针传递过来
返 回 值: 成功:函数不返回
失败:函数返回-1
int main()
{
char * argv[] = {“ls”,”-al”,”/etc/passwd”,NULL};
execv(“/bin/ls”,argv);
}
4.execve
函数的作用:执行文件
函数的原型:int execve(const char * filename, char * const argv[],char * const envp[]);
函数的参数:filename代表的文件路径
argv是数组里指针传过来
envp是传递给执行文件的新环境变量
返 回 值: 成功:函数不返回
失败:函数返回-1
int main()
{
char * argv[] = {“ls”,”-al”,”/etc/passwd”,NULL};
char * envp[] = {“PATH = /bin”,0};
execve(“/bin/ls”,argv,envp);
}
5.execvp
函数的作用:执行文件
函数的原型:int execvp(const char * file,char * const argv[]);
返 回 值: 成功:函数不返回
失败:函数返回-1
int main()
{
char * argv[] = {“ls”,”-al”,”/etc/passwd”,0};
execvp(“ls”,argv);
}