Linux C——exec函数族

来源:互联网 发布:js定义关联数组 编辑:程序博客网 时间:2024/05/22 03:15

1.execl函数

相关函数

Fork,execle,execlp,execv,execve,execvp

表头文件

#include <unistd.h>

函数原型

Int execl(const char *path, const char *arg, ...);

函数作用

Execl()用来执行参数path字符串所代表的文件路径,接下来的参数代表执行该文件时传递过去的argv[0], argv[1], ..., 最后一个参数必须用空指针(NULL)做结束

返回值

如果执行成功返回则函数不会返回,执行失败则直接返回-1,失败原因存于errno

 

2.execlp函数

相关函数

Fork,execl,execle,execv,execve,execvp

表头文件

#include <unistd.h>

函数原型

Int execlp(const char *file, const char *arg, ...);

函数作用

Execlp()会从PATH环境变量所指的目录中查找查找符合参数file的文件名,找到后便执行该文件,然后将第二个参数以后参数当作该文件的argv[0], argv[1], ..., 最后一个参数必须用空指针(NULL)做结束

返回值

如果执行成功返回则函数不会返回,执行失败则直接返回-1,失败原因存于errno

错误代码

参考execve()

 

3.execve函数

相关函数

Fork,execl,execle,execlp,execv,execvp

表头文件

#include <unistd.h>

函数原型

Int execve(const char *filename, char *const argv[], char *const envp[]);

 

函数作用

Execve()用来执行参数filename字符串所代表的文件路径,第二个参数利用数组指针来传递给执行文件,最后一个参数则为传递给执行文件的新环境变量数组

返回值

如果执行成功返回则函数不会返回,执行失败则直接返回-1,失败原因存于errno

 

 

 

错误代码

EACCES

①欲执行的文件不具有用户可执行的权限。

②欲执行的文件所属的文件系统是以noexec方式挂上。

③欲执行的文件或script翻译器非一般文件。

EPERM

①进程处于被追踪模式,执行者并不具有root权限,欲执行的文件具有SUIDSGID位。

②欲执行的文件所属的文件系统是以nosuid方式挂上,欲执行的文件具有SUIDSGID位元,但执行者并不具有root权限。

E2BIG 参数数组过大

ENOEXEC 无法判断欲执行文件的执行文件格式,有可能是格式错误或无法在此平台执行。

EFAULT 参数filename所指的字符串地址超出可存取空间范围。

ENAMETOOLONG 参数filename所指的字符串太长。

ENOENT 参数filename字符串所指定的文件不存在。

ENOMEM 核心内存不足

ENOTDIR 参数filename字符串所包含的目录路径并非有效目录

EACCES 参数filename字符串所包含的目录路径无法存取,权限不足

ELOOP 过多的符号连接

ETXTBUSY 欲执行的文件已被其他进程打开而且正把数据写入该文件中

EIO I/O 存取错误

ENFILE 已达到系统所允许的打开文件总数。

EMFILE 已达到系统所允许单一进程所能打开的文件总数。

EINVAL 欲执行文件的ELF执行格式不只一个PT_INTERP节区

EISDIR ELF翻译器为一目录

ELIBBAD ELF翻译器有问题。

 

4.execvp函数

相关函数

Fork,execl,execle,execv,execve,execlp

表头文件

#include <unistd.h>

函数原型

Int execvp(const char *file, const char *arg[]);

函数作用

Execlp()会从PATH环境变量所指的目录中查找查找符合参数file的文件名,找到后便执行该文件,然后将第二个参数argv传递给该欲执行的文件

返回值

如果执行成功返回则函数不会返回,执行失败则直接返回-1,失败原因存于errno

错误代码

参考execve()

0 0