学习Linux命令 - execl

名称: execl,execlp,execle,execv,execvp - 执行文件

概要

#include

extern char ** environ;

int execl(const char * path ,const char * arg ,...);
int execlp(const char * 文件 ,const char * arg ,...);
int execle(const char * path ,const char * arg ,...,char * const envp []);
int execv(const char * path ,char * const argv []);
int execvp(const char * file ,char * const argv []);

描述

exec系列功能用新的过程映像替换当前的过程映像。 本手册页中描述的功能是execve (2)函数的前端。 这些函数的初始参数是要执行的文件的路径名。

execlexeclpexecle函数中的const char * arg和随后的省略号可以被认为是arg0arg1 ,..., argn 。 它们一起描述了一个或多个指向以空字符结尾的字符串的指针列表,这些字符串表示可执行程序可用的参数列表。 按照惯例,第一个参数应指向与正在执行的文件关联的文件名。 参数列表必须NULL指针终止。

execvexecvp函数提供了一个指向null结尾字符串的指针数组,这些字符串表示新程序可用的参数列表。 按照惯例,第一个参数应指向与正在执行的文件关联的文件名。 指针数组必须NULL指针终止。

execle函数还通过跟随指针来指定已执行进程的环境,该指针终止参数列表中的参数列表或指向具有附加参数的argv数组的指针。 这个附加参数是一个指向空终止字符串的指针数组,并且必须由一个NULL指针终止。 其他函数在当前进程中从外部变量环境获取新进程映像的环境

其中一些函数具有特殊的语义。

如果指定的文件名不包含斜杠(/)字符, execlpexecvp函数将复制shell搜索可执行文件的操作。 搜索路径是PATH变量在环境中指定的路径 。 如果未指定此变量,则使用默认路径``:/ bin:/ usr / bin''。 另外,某些错误会被特别处理。

如果文件的权限被拒绝(尝试的execve返回EACCES ),这些函数将继续搜索搜索路径的其余部分。 但是,如果找不到其他文件,它们将返回全局变量errno,设置为EACCES

如果文件的头部没有被识别(试图执行的execve返回ENOEXEC ),这些函数将执行该文件的路径作为第一个参数的shell。 (如果此尝试失败,则不再进行搜索。)

返回值

如果任何exec函数返回,则会发生错误。 返回值是-1,并且全局变量errno将被设置为指示错误。