exec函数族
作者:互联网
一、exec函数族
fork创建子进程后,执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用exec函数以执行另一个程序。
exec函数族:
使进程执行某一程序。成功无返回值,失败返回 -1
其中,重点是execl函数和execlp函数
int execlp(const char *file, const char *arg, ...); 借助 PATH 环境变量找寻待执行程序
参1: 程序名
参2: argv0
参3: argv1
...: argvN
哨兵:NULL
int execl(const char *path, const char *arg, ...); 自己指定待执行程序路径。
区别,execlp不用指定路径名,直接可执行程序名即可,因为环境变量path已经保存了路径名
int execlp(const char *file, const char *arg, …)
成功,无返回,失败返回-1
参数1:要加载的程序名字,该函数需要配合PATH环境变量来使用,当PATH所有目录搜素后没有参数1则返回出错。
该函数通常用来调用系统程序。如ls、date、cp、cat命令。
execlp这里面的p,表示要借助环境变量来加载可执行文件
注意:第一个参数是argv0,需要把程序名再写一遍,以及后面的参数都需要加上双引号,最后加上NULL
下面使用execl来让子程序调用自定义的程序。
int execl(const char *path, const char *arg, …)
这里要注意,和execlp不同的是,第一个参数是路径,不是文件名。
这个路径用相对路径和绝对路径都行。
调用的代码如下:
exec函数族一般规律:
exec函数一旦调用成功,即执行新的程序,不返回。只有失败才返回,错误值-1,所以通常我们直接在exec函数调用后直接调用perror(),和exit(),无需if判断。
l(list) 命令行参数列表
p(path) 搜索file时使用path变量
v(vector) 使用命令行参数数组
e(environment) 使用环境变量数组,不适用进程原有的环境变量,设置新加载程序运行的环境变量
事实上,只有execve是真正的系统调用,其他5个函数最终都调用execve,是库函数,所以execve在man手册第二节,其它函数在man手册第3节。
标签:const,函数,exec,char,execlp,环境变量 来源: https://www.cnblogs.com/chenya-coding/p/16534766.html