一、铺垫
1.进程替换,替换的是代码段和数据段,其他的并没有太大的改变;
2.进程替换没有创建新的进程;
3.程序替换,子进程与父进程有高度的独立性,但是父进程仍可以通过接口获取子进程的信息;但是新程序必须有返回给父进程的返回值;
4.程序替换成功之后,exec*的后续代码不会被执行,替换失败之后,才会继续执行后续代码;exec*替换成功没有返回值,失败才会有返回值;
二、函数细讲
1.execl函数
int execl(const char *path, const char *arg, ...);
第一个参数:路径名,比如:"/usr/bin/ls",此路径名是为了确定该文件具体在哪里,是否存在,等问题;路径名中必须要包含要执行的文件名;用绝对路径或相对路径
第二个参数:要执行的文件名;要怎样执行;
第三个参数:可变参数列表,最后必须以NULL结尾
举例:
execl("/usr/bin/ls","ls","-a","-l",NULL);
execl("/usr/bin/ls","ls"NULL); //什么参数都不加
execl("./ls","ls"NULL); //当前路径下的程序;(为了演示才这样写)
2.execlp函数
p—path:execlp自己会在默认的path环境中查找;
int execlp(const char *file, const char *arg, ...);
execlp("ls","ls","-a","-l",NULL); //举例
3.execv函数
v—vector
int execv(const char *path, char *const argv[]);
不用可变参数,定义了指针数组,把参数传进指针数组里来用
举例:char *const myargv[]={"ls","-a",NULL};
execv("/usr/bin/ls", myargv[]);
4.execvp函数
int execvp(const char *file, char *const argv[]);
在默认的path环境中寻找文件去执行;
5.execle函数
int execle(const char *path, const char *arg, ...,char *const envp[]);
//最后一个参数,变成环境变量的参数;
char *const myenv[]={"myenv=1111111"} //把环境变量传进去
//采用的策略是覆盖,而不是增加,父进程的环境变量被覆盖;
通过环境变量把变量传给子进程,来供子进程使用;