看书上的关于exec函数的部分有点然,百度了一下各个函数,总结如下
1.execv函数:
#include <unistd.h>
int exevc(const char *pathname,char *const argv[]);
argv参数是一个以空指针结尾的数组,即该数组里面存放的是命令执行需要的参数,最后一个元素是NULL
并且测试过后,argv[0]里面存放什么对结果不影响,所以argv[0]应该存放的是名字,而参数在第二个及以后存放
2.execve函数
#include<unistd.h>
int execve(const char * filename,char * const argv[ ],char * const envp[ ]);
execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用指针数组来传递给执行文件,并且同样需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。
该函数如果执行成功则无返回值,执行失败则直接返回-1,失败原因存于errno 中。
3.execl函数
#include <unistd.h>
int execl(const char *path, const char *arg, ...);
函数成功无返回值,失败返回-1,失败原因存在errno中,可借perror打印出来
execl()其中后缀”l”代表list也就是参数列表的意思,第一参数path字符指针所指向要执行的文件路径, 接下来的参数代表执行该文件时传递的参数列表:argv[0],argv[1]… 最后一个参数须用空指针NULL作结束。
4.execle函数
#include<unistd.h>
int execle(const char * path,const char * arg,....,char *const envp[]);
execl是用来执行参数path字符串所代表的文件路径,并为新程序复制最后一个参数所指示的环境变量。接下来的参数代表执行该文件时传递过去的argv(0)、argv[1]……,最后一个参数必须用空指针(NULL)作结束。
函数执行成功无返回值,失败返回-1,失败原因存于errno中
5.execvp函数
#include<unistd.h>
int execvp(const char *file ,char * const argv []);
该函数会从PATH 环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。
如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。
6.execlp函数
#include<unistd.h>
int execlp(const char * file,const char * arg,....);
该函数会从PATH 环境变量所指的目录中查找参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。
如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。
***1.***exec函数一共有六个,其中execve为内核级系统调用,其他四个函数( execl,execle,execlp,execv,execvp )都是调用execve的库函数。
2.除了execlp()和execvp()函数外的四个函数都要求第一个参数是完整路径,而这两个可以简单到仅仅是一个文件名,它俩会自动到PATH指定的目录里找
3.只有execle()和execve()有环境变量参数,其他四个不是不传,而是默认环境变量不做修改,而这两个会用指定的环境变量去替代默认的
(其实书上还有个exec函数错误表,但是我懒得总结了…大家到时候看errno的错误不知道的百度一下吧)