exec()函数族,man手册

exec()函数族,man手册

函数:
execl, execlp, execle, execv, execvp, execvpe -执行一个文件
概要

include < unistd.h >

外部变量 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 execvpe(const char *file, char *const argv[], const char * envp []);

描述
exec()函数族用一个新的进程映像替换当前的进程映像。本手册介绍的功能
page是execve(2)的前端。(请参阅execve(2)手册页,了解有关当前版本更换的详细信息过程的形象。)
这些函数的初始参数是要执行的文件名。
execl()、execlp()和execle()函数中的const char *arg及其后面的省略号可以看作是arg0、arg1、…
argn。它们一起描述了一个列表,其中包含一个或多个指向以空结尾的字符串的指针,这些字符串表示可用的参数列表执行计划。按照惯例,第一个参数应该指向与正在执行的文件相关联的文件名。参数列表必须以一个空指针结束,并且,由于这些是可变参数函数,必须转换该指针(char *)NULL。
execv()、execvp()和execvpe()函数提供了一个指针数组,指向表示参数的以空结束的字符串,新程序可用的列表。第一个参数,按照惯例,应该指向与文件相关联的文件名执行。指针数组必须以空指针结束。
execle()和execvpe()函数允许调用者通过参数envp指定所执行程序的环境。的envp参数是一个指针数组,指向以空结束的字符串,必须以空指针结束。其他的函数来自调用进程中的外部变量environ的新进程映像的环境。
execlp()和execvp()的特殊语义
execlp(), execvp()和execvpe()函数在搜索可执行文件时复制shell的动作文件名不包含斜杠(/)字符。在冒号分隔的目录路径名列表中查找文件。
在PATH环境变量中确定。如果没有定义此变量,则路径列表默认为当前目录,后跟由confstr(_CS_PATH)返回的目录列表。(这个confstr(3)调用通常返回值"/bin:/usr/bin"。)
如果指定的文件名包含斜杠字符,则PATH将被忽略,并且在指定的路径名处的文件将被执行。
此外,还对某些错误进行了特殊处理。
如果一个文件的权限被拒绝(尝试执行execve(2)失败,错误是EACCES),这些函数将继续搜索,搜索路径的其余部分。但是,如果找不到其他文件,它们将返回errno并将其设置为EACCES。
如果不能识别文件头(试图执行的execve(2)失败,错误是ENOEXEC),这些函数将执行shell (/bin/sh),第一个参数是文件的路径。(如果此尝试失败,则不再进行进一步的搜索。)
返回值
exec()函数只在发生错误时返回。返回值是-1,errno被设置为表示错误。
错误
所有这些函数都可能失败,并为为execve(2)指定的任何错误设置errno。
版本
execvpe()函数最早出现在glibc 2.11中。
符合
posix . 1的授权posix . 1的授权- 2001 - 2008。
execvpe()函数是GNU的扩展名。
笔记
在其他一些系统中,默认路径(当环境中不包含变量路径时使用)有当前的工作路径tory列在/bin和/usr/bin之后,作为反木马的措施。Linux在这里使用传统的“当前目录优先”默认路径。
execlp()和execvp()在执行文件时发生错误的行为是历史惯例,但不是传统行为在POSIX标准中没有指定。BSD(可能还有其他系统)会自动休眠如果遇到etextbsy,请重试。Linux将其视为硬错误并立即返回。传统上,execlp()和execvp()函数忽略了所有错误,除了上面描述的错误和ENOMEM和E2BIG, upon
他们回来了。如果发生了上述错误以外的任何错误,它们将返回。
另请参阅
sh(1), execve(2), fork(2), ptrace(2), fexecve(3), environ(7)
版本记录
本页面是Linux man-pages项目3.35版的一部分。项目的描述,以及有关报告的信息
bug,可以在http://man7.org/linux/man-pages/找到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值