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软件特性之Draw
ZBrush®中的Draw绘制调色板包括了当前绘图的修改和控制工具,能改变工具大小.形状.强度.不透明度和其他一些功能. Draw Size(绘制大小):设置画笔的外形尺寸,调节ZBrush绘制笔刷圆 ...
- nginx学习地址
http://www.cnblogs.com/magicsoar/p/5817734.html
- Pyhton学习——Day38
#CSS:Cascading Style Sheets——层叠样式表# CSS的四种引入方式# 行内式是在标记的style属性中设定CSS样式.这种方式没有体现出CSS的优势,不推荐使用.###### ...
- 在HTTP页面输入数据,Chrome 70将显示红色不安全警告
2018年10月17日,Chrome 70版本正式发布,该版本更新多项安全功能,再次升级对HTTP页面的不安全警告样式.当用户在HTTP页面输入数据时,Chrome 70将显示醒目的红色不安全警告,让 ...
- -java转json hibernate懒加载造成的无限递归问题
1.在判断到底是谁维护关联关系时,可以通过查看外键,哪个实体类定义了外键,哪个类就负责维护关联关系. JoinColumn(name="pid") 2. 在保存数据时,总是先保存的 ...
- input只能输入数字或两位小数
/** * [只能输入数字和两位小数] * 举例:<input type="text" onkeyup="num(this)" size="10 ...
- sqrt开平方算法的尝试,是的看了卡马克大叔的代码,我来试试用C#写个0x5f3759df和0x5f375a86跟System.Math.Sqrt到底哪个更强
今天笔试遇到一个代码题,要求写一个开平方算法,回来发现了雷神之锤里的一段神代码: float Q_rsqrt( float number ) { long i; float x2, y; const ...
- js实现点击复制网页内容(基于clipboard.js)
浏览网页过程中会遇到点击复制链接地址的情况,下面就介绍一种实现方法,该方法是基于clipboard.js: 官网地址:https://clipboardjs.com/: clipboard.js使用比 ...
- 【codeforces 767E】Change-free
[题目链接]:http://codeforces.com/problemset/problem/767/E [题意] 你有m个1元硬币和无限张100元纸币; 你在第i天,需要花费ci元; 同时在第i天 ...
- RabbitMQ学习总结(5)——发布和订阅实例详解
一.Publish/Subscribe(发布/订阅)(using the Java Client) 在前面的教程中,我们创建了一个work Queue(工作队列).工作队列背后的假设是每个任务是交付给 ...