execlp(3) - Linux手册
名称:
execl, execlp, execle, execv, execvp, execvpe:执行文件
总览:
#include <unistd.h>
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 *constargv[]);
int execvp(const char *file, char *constargv[]);
int execvpe(const char *file, char *const argv[],char *const envp[]);
描述:
exec()系列函数用于将当前的进程映像替换为一个新的进程映像。本文描述的函数是基于execve(2)实现的。
这些函数的第一个参数是需要被执行的文件名称。
execl(),execlp(),execle()函数中的const char*arg1,...,argn参数描述的一系列以null结尾的字符串指针是需要执行的函数的参数列表。按照惯例,第一个arg1应是将要执行的文件名。这一系列参数必须以一个NULL指针结尾,而且,因为这是可变参数函数,NULL指针应该被强制转化为(char*)NULL.
execv(),execvp(),execvpe()函数提供了字符串指针数组(字符串以null结尾),这个数组代表了待执行文件可用的参数列表。数组中的第一个元素按照惯例应该是待执行文件名。数组的最后一个元素是NULL指针。
execle(),execvpe()函数允许调用者通过envp参数指定待执行程序的环境。envp是一个字符串指针数组,字符串以null结尾,数组的最后一个元素是NULL指针。其他的程序可以从调用进程的全局变量environ中获取新进程映像的环境。
execlp()和execvp()的特殊语义:
execlp(), execvp(), 和execvpe()复制了shell在指定的文件名不包含"/"字符时寻找可执行文件的行为。在这种情况下,文件会在PATH环境变量指定的以冒号分隔的一系列路径名中寻找。如果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)有错误产生时,这些函数的执行可能会失败(可能会成功),失败时将erno设置为execve(2)指定的错误码。
版本:
execvpe()函数在glibc2.11中首次出现。
符合规范:
POSIX.1-2001,POSIX.1-2008
execvpe()函数是GNU扩展
注意:
在某些操作系统中,当不包含PATH环境变量时返回的默认路径是当前路径跟在"/bin"和"/usr/bin"后面而不是前面,目的是为了抵抗特洛伊木马。Linux使用传统的当前路径在第一个的方式。
execlp()和execvp()在尝试执行文件产生错误时的行为没有在POSIX标准中指定,而是依照历史操作。BSD操作系统会执行原子的睡眠然后再ETXTBSY出现的时候重试。Linux会将其当作硬件错误并立即返回。
习惯上,execlp()和execvp()会忽视除EACCES,ENOMEM,E2BIG之外的所有错误。如果遇到了其他的错误就会直接返回。。
原文:
https://linux.die.net/man/3/execlp
execlp(3) - Linux手册的更多相关文章
- Manual | BSD手册| Linux手册 | 数据库手册 | 编程开发手册 | WEB开发手册 | 软件应用手册 | 网络技术手册 | GNU手册
豆豆手册 □ BSD手册 □ Linux手册 □ 数据库手册 □ 编程开发手册 □ WEB开发手册 □ 软件应用手册 □ 网络技术手册 □ GNU手册 在线手册 首 页 BSD手册 ·FreeBS ...
- Linux 手册惯用的节名
linux 手册将
- Linux系统调用
在前面,我们接触到了很多函数能够实现系统相关的功能,比如解析命令行参数.控制进程以及映射内存等等.实际上,这些函数能够分为两大类: 库函数--这些函数就像普通函数一样,参数放置在寄存器或者栈里,运行时 ...
- 爹地,我找到了!,15个极好的Linux find命令示例
爹地,我找到了!, 15个极好的Linux find命令示例 英文原文:Daddy, I found it!, 15 Awesome Linux Find Command Examples 标签: L ...
- 编写出色的GNU/Linux程序
http://advancedlinuxprogramming.com提供了本书电子版的免费下载. 1 与执行环境交互 关于参数 C语言程序的main()函数使用两个参数和执行环境交互--(int)a ...
- 30个实用的Linux find命令
除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易.本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令 . 首先,在你 ...
- Linux进程通信之System V消息队列
System V消息队列是Open Group定义的XSI,不属于POSIX标准.System V IPC的历史相对很早,在上个世70年代后期有贝尔实验室的分支机构开发,80年代加入System V的 ...
- 30个实用的Linux find命令示例
除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易. 本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令. 首先,在你 ...
- 15个极好的Linux find命令示例(二)
前阵子,我们审查了15件实事 find命令的例子(第一部分).查找命令可以做很多比只是在寻找基于名称的文件 (第2部分)在这篇文章中,让我们来讨论15高级find命令的例子, 包括-根据它访问,修改或 ...
随机推荐
- 如何在ZBrush 4R7中设置背面遮罩
ZBrush 4R7中的背面遮罩是如何来设置的?当我们在进行ZBrush雕刻创作的时候,经常会不经意的雕刻到背面的物体,那么,如何防止背面的物体不被雕刻到,这就需要设置下背景遮罩了. ZBrush 4 ...
- Django框架详解之url
Django基本命令 下载Django pip3 install django 创建一个django project django-admin.py startproject cms 当前目录下会生成 ...
- vue 中判断向上滚动还是向下滚动
<script> export default { data(){ return{ i = 0 } }, mounted () { window.addEventListener('scr ...
- python中方法与函数的区别与联系
今天huskiesir在对列表进行操作的时候,用到了sorted()函数,偶然情况下在菜鸟教程上看到了内置方法sort,同样都可以实现我对列表的排序操作,那么方法和函数有什么区别和联系呢? 如下是我个 ...
- hbase的hbase-site.xml配置文件
<property> <name>hbase.rootdir</name> <value>hdfs://server110/hbase</valu ...
- Android application framework 分析[in process]
application activity application service application UI system application sdk tool JVM 1 activity t ...
- Okio简化处理I/O操作原理
转载:http://blog.csdn.net/sbsujjbcy/article/details/50523623 Okio库是一个由square公司开发的,它补充了java.io和java.nio ...
- hdu2838Cow Sorting(树状数组+逆序数)
题目链接:点击打开链接 题意描写叙述:给定一个长度为100000的数组,每一个元素范围在1~100000,且互不同样,交换当中的随意两个数须要花费的代价为两个数之和. 问怎样交换使数组有序.花费的代价 ...
- node10---GET请求和POST请求的参数
GET请求的参数在URL中,在原生Node中,需要使用url模块来识别参数字符串.在Express中,不需要使用url模块了.可以直接使用req.query对象. ● POST请求在express中不 ...
- Another app is currently holding the yum lock; waiting for it to exit…
yum被锁定无法使用,错误信息截图如下:解决方法:rm -rf /var/run/yum.pid 来强行解除锁定,然后你的yum就可以运行了