[Linux C编程]exec函数簇

来源:互联网 发布:windows隐藏任务栏 编辑:程序博客网 时间:2024/05/14 03:11

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);

}

0 0
原创粉丝点击