前言
exec函数族提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可执行的脚本文件 ----《百度百科》
这也是在linux的世界中,其实就是由一个init进程创建,之后通过fork进行克隆之后,再由exec函数族替换来形成的一个体系
作用
在一个进程没有作用的时候,可以用exec函数族来代替这个函数,从而实现一次“重生”,或者在使用fork的时候来重新定义
int execl(const char *path, const char *arg, ...);
功能:该函数可以用于启动一个指定路径+名称的程序。
参数: path 要启动的程序的路径+名称,一般是绝对路径。
arg 要启动的
int execlp(const char *file, const char *arg, ...);
功能:该函数可以启动指定的程序。
参数:file 要启动的程序名称,同时该程序要位于系统环境变PATH范围内 。
arg ... 启动程序的参数,参考 execl 一样
返回值:成功 不会返回
失败 -1
注 可以通过暂时改变环境变量来实现
int setenv(const char *name, const char *value, int overwrite);
name: 环境变量名字“PATH”
value:要修改的环境变量“。。”,(表示将上层目录写到环境变量中)
overwrite:是否重写,填1表示重写
nt execv(const char *path, char *const argv[]);
功能:该函数可以将指定路径+名称的程序启动执行。
参数:path 要启动的程序路径+名称
argv[] 要启动的目标程序参数所构成的数组;
返回值:成功 不会返回,会转嫁到目标程序
失败 -1;