其他分享
首页 > 其他分享> > exec函数族

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