名称:

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手册的更多相关文章

  1. Manual | BSD手册| Linux手册 | 数据库手册 | 编程开发手册 | WEB开发手册 | 软件应用手册 | 网络技术手册 | GNU手册

    豆豆手册 □ BSD手册 □ Linux手册 □ 数据库手册 □ 编程开发手册 □ WEB开发手册 □ 软件应用手册 □ 网络技术手册 □ GNU手册 在线手册 首 页 BSD手册   ·FreeBS ...

  2. Linux 手册惯用的节名

    linux 手册将

  3. Linux系统调用

    在前面,我们接触到了很多函数能够实现系统相关的功能,比如解析命令行参数.控制进程以及映射内存等等.实际上,这些函数能够分为两大类: 库函数--这些函数就像普通函数一样,参数放置在寄存器或者栈里,运行时 ...

  4. 爹地,我找到了!,15个极好的Linux find命令示例

    爹地,我找到了!, 15个极好的Linux find命令示例 英文原文:Daddy, I found it!, 15 Awesome Linux Find Command Examples 标签: L ...

  5. 编写出色的GNU/Linux程序

    http://advancedlinuxprogramming.com提供了本书电子版的免费下载. 1 与执行环境交互 关于参数 C语言程序的main()函数使用两个参数和执行环境交互--(int)a ...

  6. 30个实用的Linux find命令

    除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易.本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令 . 首先,在你 ...

  7. Linux进程通信之System V消息队列

    System V消息队列是Open Group定义的XSI,不属于POSIX标准.System V IPC的历史相对很早,在上个世70年代后期有贝尔实验室的分支机构开发,80年代加入System V的 ...

  8. 30个实用的Linux find命令示例

    除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易. 本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令. 首先,在你 ...

  9. 15个极好的Linux find命令示例(二)

    前阵子,我们审查了15件实事 find命令的例子(第一部分).查找命令可以做很多比只是在寻找基于名称的文件 (第2部分)在这篇文章中,让我们来讨论15高级find命令的例子, 包括-根据它访问,修改或 ...

随机推荐

  1. 如何在ZBrush 4R7中设置背面遮罩

    ZBrush 4R7中的背面遮罩是如何来设置的?当我们在进行ZBrush雕刻创作的时候,经常会不经意的雕刻到背面的物体,那么,如何防止背面的物体不被雕刻到,这就需要设置下背景遮罩了. ZBrush 4 ...

  2. Django框架详解之url

    Django基本命令 下载Django pip3 install django 创建一个django project django-admin.py startproject cms 当前目录下会生成 ...

  3. vue 中判断向上滚动还是向下滚动

    <script> export default { data(){ return{ i = 0 } }, mounted () { window.addEventListener('scr ...

  4. python中方法与函数的区别与联系

    今天huskiesir在对列表进行操作的时候,用到了sorted()函数,偶然情况下在菜鸟教程上看到了内置方法sort,同样都可以实现我对列表的排序操作,那么方法和函数有什么区别和联系呢? 如下是我个 ...

  5. hbase的hbase-site.xml配置文件

    <property> <name>hbase.rootdir</name> <value>hdfs://server110/hbase</valu ...

  6. Android application framework 分析[in process]

    application activity application service application UI system application sdk tool JVM 1 activity t ...

  7. Okio简化处理I/O操作原理

    转载:http://blog.csdn.net/sbsujjbcy/article/details/50523623 Okio库是一个由square公司开发的,它补充了java.io和java.nio ...

  8. hdu2838Cow Sorting(树状数组+逆序数)

    题目链接:点击打开链接 题意描写叙述:给定一个长度为100000的数组,每一个元素范围在1~100000,且互不同样,交换当中的随意两个数须要花费的代价为两个数之和. 问怎样交换使数组有序.花费的代价 ...

  9. node10---GET请求和POST请求的参数

    GET请求的参数在URL中,在原生Node中,需要使用url模块来识别参数字符串.在Express中,不需要使用url模块了.可以直接使用req.query对象. ● POST请求在express中不 ...

  10. Another app is currently holding the yum lock; waiting for it to exit…

    yum被锁定无法使用,错误信息截图如下:解决方法:rm -rf /var/run/yum.pid 来强行解除锁定,然后你的yum就可以运行了