refer: http://www.groad.net/bbs/forum.php?mod=viewthread&tid=862

指exec()函数族,包括execl、execle、execlp、execv、execvp和execve。

一、exec()函数族的组成

  1. execl:逐个列举参数的方式,语法为const char *arg。
  2. execle:逐个列举参数的方式,并可以在envp[]中指定当前进程所使用的环境变量。
  3. execlp:将所有参数整体构造指针数组传递,语法为char *const argv[]。
  4. execv:将所有参数整体构造指针数组传递,语法为char *const argv[]。
  5. execve:实际系统调用,也是exec()函数族中唯一的内核实现。
  6. execvp:将所有参数整体构造指针数组传递,同时会搜索PATH环境变量中的路径,寻找指定的文件。

二、exec()函数族的特点

  1. 可以根据命令行参数和环境变量参数,以及默认的环境变量来加载执行一个可执行文件。
  2. 可以通过逐个列举参数和将所有参数整体构造指针数组传递两种方式。
  3. 一旦调用了exec()类函数,系统将该进程的代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并根据新程序分配新的数据段与堆栈段。

三、exec()函数族的错误处理

  1. 如果找不到文件或路径,此时 errno 被设置为 ENOENT。
  2. 数组 argv 和 envp 忘记用 NULL 结束,此时 errno 被设置为EFAULT。
  3. 没有对应可执行文件的运行权限,此时 errno 被设置为 EACCES。