目录
- (1)execl
- (2)execlp
- (3)execle
- (4)execv
- (5)execvp
- (6)execve
在进程控制中提到,子进程的最大价值在于程序替换,而exec函数簇就是用来进行程序替换的函数,本文会简要的讲解如何去使用exec函数簇。
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 *file, char *const argv[],char *const envp[]); 系统调用接口
(1)execl
int execl( const char *path, const char *arg, ...)
- const char *path:新程序的名称(要带程序的路径)
- const char *arg:函数运行参数,不定参,可以有多个,但最后要以NULL结尾。
返回值:失败返回-1
示例:execl(“./main”,“./main”,“a”,“b”,NULL)
如图:我们运行的程序名称是./main,但是在运行时还给予了参数 a、b。程序名本身也是一个参数。
(2)execlp
int execlp( const char *file, const char *arg, ...)
- const char *file:新程序名(不带路径,因为系统会去path环境变量指定的路径下面去找对应的程序,常用于指令程序替换)
- const char *arg: 运行时参数,不定参,可以有多个,但最后要以NULL结尾
返回值:失败返回-1
示例:execlp(“ls”,“ls”,“-l”,NULL)
(3)execle
int execle( const char *path, const char *arg , ..., char * const envp[]);
- const char *path:新程序名称(要带路径)
- const char *arg :参数,不定参,可以有多个,但最后要以NULL结尾
- char * const envp[]:envp里面是环境变量
返回值:失败返回-1
示例:execle(“./main”,“./main”,“-a”,NULL,envp)
(4)execv
int execv( const char *path, char *const argv[]);
- const char *path:新程序名称(要带路径)
- char *const argv[]:参数,参数不是一个一个给,而是存在字符数组中一次性给。
返回值:失败返回-1
示例:char * argv[]={“./main”,“a”,“b”,NULL}
execv(“./main”,argv)
(5)execvp
int execvp( const char *file, char *const argv[]);
- const char *file:新程序名(不带路径,在path环境变量指定的路径下面去找程序,常用于指令程序替换)
- char *const argv[] :运行时参数,参数用数组传递
返回值:失败返回-1
示例:char * argv[]={“ls”,“-a”,“-l”,NULL}
execvp(“ls”,argv)
(6)execve
int execve(const char *file, char *const argv[],char *const envp[]);
这是系统调用接口,其他五个都是封装的库函数。
- const char *file:新程序名称(要带路径)
- char *const argv[]:运行时,参数不是一个一个给,而是存在字符数组中一次性给。
- char *const envp[]:envp里面是环境变量
返回值:失败返回-1
示例:char * argv[]={“./main”,“a”,“b”,NULL}
execve(“./main”,argv,envp)