exec在Linux中指的是一组函数,一共是六个,分别是
- int execl(const char *path,const char *arg,…)
- int execlp(const char *path,const char *arg,…)
- int execle(const char *path,const char *arg,…,char const *envp[])
- int excev(const char *path,char *const argv[])
- int execvp(const char *path,char *const argv[])
- int execve(const char *path,char *const argv[],char *const argv[])
其中只有execve才是真正意义上的系统调用,其他都是在此基础上包装的库函数
下面对这几个函数进行说明
execl函数
execl函数用于执行文件
表头文件 | #include<unisth.h> |
---|---|
定义函数 | int execl(const char *path,const char *arg… |
函数说明 | execl()用来执行参数path字符串所带便的文件路径,接下来的参数代表执行该文件时传递过去的argv[0],argv[1]…,最后一个参数必须用空指针NULL作结束 |
返回值 | 如果执行成功不会反悔,失败返回-1失败原因存于error中 |
execlp函数
execlp用于从PATH环境变量中查找文件并执行
表头文件 | #include<unistd.h> |
---|---|
定义函数 | int execlp(const char *path,const char *arg,…) |
函数说明 | execlp()会从PATH环境变量所指的目录中查找符合 参数file的文件名,找到后执行改文件,然后将第二个以后的参数当做改文件的argv[0], argv[1]…,最后一个参数必须用空指针NULL作结束 |
返回值 | 如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于error中 |
execve函数
表头文件 | #include<unistd.h> |
---|---|
定义函数 | 3. int execle(const char *path,const char *arg,…,char const *envp[]) |
函数说明 | execve()用来执行参数pathname字符串所代表的文件路径,第二个参数系列利用数组指针来传递给执行文件,最后一个参数则为传递给执行文件的新环境变量数组 |
返回值 | 如果执行成功则函数不会返回,执行失败返回-1,失败原因存于error中 |
execvp函数
execvp函数用于执行文件
表头文件 | #include<unistd.h> |
---|---|
定义函数 | int execvp(const char *path,char *const argv[]) |
函数说明 | execvp()会从PATH环境变量所指的目录中查找符合参数file的文件名,找到后便执行改文件,然后将第二个参数argv传给欲执行的文件 |
返回值 | 如果执行成功则函数不返回,失败则返回-1,错误存于error中 |
启动进程:system
system函数用于执行shell命令
表头文件 | #include<stdlib.h> |
---|---|
定义函数 | int system(const char*string) |
函数说明 | system会调用fork产生的子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,由命令执行完后随即返回原调用的进程,在调用system()期间SIGCLD信号会被暂时搁置,SIGINT和SIGQUIT信号被忽略 |
返回值 | 如果system在调用/bin/sh时失败则返回127,其他原因失败返回-1,若参数string为空指针,则返回非零值。如果system调用成功则最后会返回执行shell命令的返回值, |