名称
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)的前端。
这些函数的初始参数是要执行的文件的路径名。
execl , execlp和execle函数中的const char * arg和随后的省略号可以被认为是arg0 , arg1 ,..., argn 。 它们一起描述了一个或多个指向以空字符结尾的字符串的指针列表,这些字符串表示可执行程序可用的参数列表。 按照惯例,第一个参数应指向与正在执行的文件关联的文件名 。 参数列表必须以NULL指针终止。
execv和execvp函数提供了一个指向null结尾字符串的指针数组,这些字符串表示新程序可用的参数列表。 按照惯例,第一个参数应指向与正在执行的文件关联的文件名。 指针数组必须以NULL指针终止。
execle函数还通过跟随空指针来指定已执行进程的环境,该指针终止参数列表中的参数列表或指向具有附加参数的argv数组的指针。 这个附加参数是一个指向空终止字符串的指针数组,并且必须由一个NULL指针终止。 其他函数在当前进程中从外部变量环境获取新进程映像的环境 。
其中一些函数具有特殊的语义。
如果指定的文件名不包含斜杠(/)字符, execlp和execvp函数将复制shell搜索可执行文件的操作。 搜索路径是PATH变量在环境中指定的路径 。 如果未指定此变量,则使用默认路径``:/ bin:/ usr / bin''。 另外,某些错误会被特别处理。
如果文件的权限被拒绝(尝试的execve返回EACCES ),这些函数将继续搜索搜索路径的其余部分。 但是,如果找不到其他文件,它们将返回全局变量errno,设置为EACCES 。
如果文件的头部没有被识别 (试图执行的execve返回ENOEXEC ),这些函数将执行该文件的路径作为第一个参数的shell。 (如果此尝试失败,则不再进行搜索。)
返回值
如果任何exec函数返回,则会发生错误。 返回值是-1,并且全局变量errno将被设置为指示错误。
重要提示:使用man命令( %man )查看特定计算机上的命令使用方式。