名称:

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. P3376 【模板】网络最大流(luogu)

    P3376 [模板]网络最大流(luogu) 最大流的dinic算法模板(采取了多种优化) 优化 时间 inline+当前弧+炸点+多路增广 174ms no 当前弧 175ms no 炸点 249 ...

  2. php中mysqli 处理查询结果集总结

    在PHP开发中,我们经常会与数据库打交道.我们都知道,一般的数据处理操作流程为 接收表单数据 数据入库 //连接数据库 $link = mysqli_connect("my_host&quo ...

  3. v4l2程序实例

    #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> ...

  4. mysql linux查看配置文件my.cnf位置

    原文:mysql linux查看配置文件my.cnf位置 命令: mysql --help | grep 'Default options' -A 1

  5. centos7下部署Redis

    1.1. Redis的安装 Redis是c语言开发的. 安装redis需要c语言的编译环境.如果没有gcc需要在线安装.yum install gcc-c++ 安装步骤: 第一步:redis的源码包上 ...

  6. 创业笔记-Node.js入门之JavaScript与Node.js

    JavaScript与Node.js JavaScript与你 抛开技术,我们先来聊聊你以及你和JavaScript的关系.本章的主要目的是想让你看看,对你而言是否有必要继续阅读后续章节的内容. 如果 ...

  7. codeforces Looksery Cup 2015 H Degenerate Matrix 二分 注意浮点数陷阱

    #include <cstdio> #include <cstring> #include <algorithm> #include <string> ...

  8. 公司--下载svg图片

    加载本地svg图片: SVGParserRenderer norDrawable = OtherPageConfigsManager.getInstance().getSVGParserRendere ...

  9. Javascript防冒泡事件与Event对象

    防冒泡 防冒泡用到的就是event的属性和方法 function add2shop(e) { if (!e) var e = window.event; e.cancelBubble = true; ...

  10. _itoa进制转换

    #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <stdio.h> void main() { int ...