exec函数组六个函数的用法和区别

exec函数组有六个函数,分别是:

#include <unistd.h>

extern char **environ;

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg , ..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);

这六个函数的可以这样区分:

1、带 l 的表示参数要以list的方式给出,就是每个参数都用逗号分割,多个参数就给多个字符串

2、带 v 的表示参数用vector的方式给出,即一个字符串数组指针

3、带 p 的表示被调用的外部命令可以写成相对路径的方式,函数会到PATH环境变量中去搜索

4、带 e 的表示可以自定义环境变量

OK,现在应该已经清楚了,要注意的是,如果我们要求被调用的命令继承调用者的环境变量上下文,那么,可以用execv, execvp这样的函数;如果用了execve这样的函数,那么,千万注意第三个参数,即环境变量列表不能为NULL,如果为NULL,那么被调用的命令 就无法得到调用者的环境变量列表,如果要用execve这样的函数,要先保存当前的环境变量,然后再加入自定义的环境变量,最后放在第三个参数上。
原文地址:https://www.cnblogs.com/super119/p/2005603.html