名称:

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. [置顶] openHAB 体系结构与编程模型 (1) --- 术语

    openHAB 术语 Item : 对硬件设备属性的抽象 ( Items are objects that can be read from or written to in order to int ...

  2. ansible 主机清单 /etc/ansible/hosts

    主机清单 [webservers] ansible01 ansible02 ansible03 ansible04 [root@ftp:/root] > ansible webservers - ...

  3. JavaScript 实现留言框

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. Jquery学习总结(2)——jQuery Ajax用法详解

    [详解]jquery ajax在web应用开发中常用,主要包括有ajax,get,post,load,getscript等这几种常用无刷新操作方法,下面来给大家介绍一下.我们首先先从最简单的方法看起. ...

  5. 【转】 c#中两个DateTimePicker,一个时间设置为0:0:0,另一个设置为23:59:59

    [转] c#中两个DateTimePicker,一个时间设置为0:0:0,另一个设置为23:59:59 stp1为第一个DateTimePicker this.dtp1.Value=this.dtp1 ...

  6. 51 nod 1693 水群

    1693 水群 基准时间限制:0.4 秒 空间限制:524288 KB 分值: 160  难度:6级算法题  收藏  关注 总所周知,水群是一件很浪费时间的事,但是其实在水群这件事中,也可以找到一些有 ...

  7. [Chromium]怎样安全的使用PostTask

    PostTask參数决策树 怎样传递绑定的对象 官方的解释总是最权威.有疑问看这里或者直接看代码中的说明: bind_helpers.h. 传值方式 描写叙述 this 或 对象指针 假设对象本身是一 ...

  8. 用​M​y​E​c​l​i​p​s​e​ ​打​包​J​A​R文件

    用​M​y​E​c​l​i​p​s​e​ ​将自己定义标签打​成​J​A​R​包 1.新建一个javaproject 2.将标签有关的java代码拷贝到新建javaproject的一个包中,这时会报错 ...

  9. CentOS进入图形界面

    CentOS进入图形界面 学习了: http://www.centoscn.com/CentosBug/osbug/2014/0831/3620.html http://bbs.csdn.net/to ...

  10. grep常见使用方法总结

    grep -E 'l\{2,\}' 2.txt grep -E 'h(ell|a)o' test.txt grep '[a-z]\{5,\}' test.txt grep -xf a.txt b.tx ...