进程替换函数组介绍exec*
目录
前述
execl
execlp
execle
execv
execvp
execvpe
前述
介绍后缀的意义:
l (list):表示参数采用列表。
v(vector):参数同数组表示。
p(path):自动搜索环境变量(路径+程序名=>程序名)。
e(env):手动维护环境变量。
execl
int execl(const char *path, const char *arg, ...);
path:路径+程序名字的字符串
arg:类似控制台输入 这里arg可以有多个必须以NULL结尾
调用ls指令
execl("/usr/bin/ls", "ls","-a","-l",NULL);
execlp
int execlp(const char *file, const char *arg, ...);
file:自动在环境变量寻找路径,只需要传入程序名
arg:类似控制台输入 这里arg可以有多个必须以NULL结尾
调用ls指令
execlp("ls"/*file*/,"ls","-a","-l",NULL);
execle
int execle(const char *path, const char *arg,..., char * const envp[]);
path:路径+程序名字的字符串
arg: 类似控制台输入 这里arg可以有多个必须以NULL结尾
env: 手动维护环境变量。
调用ls指令
char*env[]={"PATH=/usr/bin/ls",NULL};
execlp("/usr/bin/ls", "ls","-a","-l",NULL,env);
execv
int execv(const char *path, char *const argv[]);
path:路径+程序名字的字符串
argv:使用数组argv代替输入多个arg参数
调用ls指令
char*argv[]={"ls","-a","-l",NULL};
execv("/usr/bin/ls",argv);
execvp
int execvp(const char *file, char *const argv[]);
file:自动在环境变量寻找路径,只需要传入程序名
argv:使用数组argv代替输入多个arg参数
调用ls指令
char*argv[]={"ls","-a","-l",NULL};
execvp("ls",argv);
execvpe
int execvp(const char *file, char *const argv[]);
file:自动在环境变量寻找路径,只需要传入程序名
argv:使用数组argv代替输入多个arg参数
env: 手动维护环境变量。
调用ls指令
char*env[]={"PATH=/usr/bin/ls",NULL};
execvpe("ls", "ls","-a","-l",NULL,env);
execve(系统函数)==execvpe
int execve(const char *filename, char *const argv[],char *const envp[]);
file:自动在环境变量寻找路径,只需要传入程序名
argv:使用数组argv代替输入多个arg参数
env: 手动维护环境变量。
这个接口是系统接口函数,我们一般都是用其他接口函数,其实这些进程替换函数是基于execve为底层的上层封装函数。
各关系关系图谱
其实,其他进程替换函数都是基于execve(系统函数)的上层封装函数。