Provided by: manpages-zh_1.5.1-1_all bug

NAME

       execl, execlp, execle, execv, execvp - 执行某个文件

 (SYNOPSIS)
       #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 *const argv[]);
       int execvp( const char *file, char *const argv[]);

 (DESCRIPTION)
       exec 系列 函数 用 新的 进程 映象 置换  当前的  进程  映象.   本  手册页
       描述的  这些  函数 实际上 是 对 execve(2) 函数 的 前端(front-end) 包装.
       (关于 当前进程 的 置换 详见 execve 的 手册页.)

       这些 函数 的 第一个 参数 是 待执行 程序 的 路径名(文件名).

       在 函数 execl, execlp, 和 execle 中, const char *arg 以及  省略号  代表
       的  参数 可被 视为 arg0, arg1, ..., argn.  他们 合起来 描述了 指向 null
       结尾的 字符串 的 指针 列表, 即 执行程序 的 参数列表. 作为 约定,  第一个
       arg 参数 应该 指向 执行程序名 自身. 参数列表 NULL 指针 结束!

       execvexecvp  函数  提供  指向 null 结尾的 字符串 的 指针数组 作为
       新程序 的 参数列表.  作为 约定,  指针数组  中  第一个  元素  应该  指向
       执行程序名 自身. 指针数组 NULL 指针 结束!

       execle  函数 同时 说明了 执行进程 的 环境(environment), 他 在 NULL 指针
       后面 要求 一个 附加参数, NULL 指针 用于  结束  参数列表,  或者说,  argv
       数组.  这个 附加参数 是 指向 null 结尾的 字符串 的 指针数组, 他 NULL 指针 结束! 其他 函数 从  当前进程  的  environ  外部变量  中  获取
       新进程 的 环境.

       某些 函数 有 特殊的 语义.

       如果  提供的  文件名  中  不包含 斜杠符(/), 函数 execlpexecvp 将 同
       shell 一样 搜索 执行文件. 搜索路径 由 环境变量 PATH 指定. 如果 该  变量
       不存在,  则  使用  缺省路径  ``:/bin:/usr/bin''.   另外,  某些  错误 要
       特殊处理.

       如果 对 某个 文件 的 访问 遭到 拒绝 ( execve 返回 EACCES), 这些 函数 将
       在  搜索路径  中  继续 寻找. 如果 没有 找到 符合的 文件, 他们 返回时 把
       errno 置为 EACCES.

       如果 无法 识别 文件首部 ( execve 返回 ENOEXEC), 这些 函数 将 以  文件名
       作为  第一个  参数  调用 shell.  (如果 这个 尝试 失败 就 不再 进行 搜索
       了.)

 (RETURN VALUE)
       任何 exec 函数 返回 均 表明 发生了 错误. 返回值 是 -1,  全局变量  errno
       指出 错误类型.

 (FILE)
       /bin/sh

 (ERROR)
       这些  函数  均可能  失败,  errno  被  置为 库函数 execve(2) 设置的 各种
       错误类型.

 (SEE ALSO)
       sh(1), execve(2), fork(2), environ(5), ptrace(2)

 (COMPATIBILITY)
       在 某些 其他系统 中, 缺省路径 (当 环境变量  PATH  不存在)  把  当前目录
       列在  /bin/usr/bin  后面, 这是 为了 防止 特洛伊木马. Linux 在这儿
       采取了 传统的 "当前目录优先" 缺省路径.

       当 试图 执行 程序 并且 发生 错误 的 时候, execlpexecvp 的  行为  是
       历史  习惯,  但是  没有  进入  正式文档, 也没有 被 POSIX 标准 说明. BSD
       (可能 还有 其他 系统) 中 进程 自动 进入 睡眠, 如果 发生  ETXTBSY,  他们
       就 重试. 而 Linux 视此为 严重错误, 并且 立即 返回.

       传统的  做法中, 函数 execlpexecvp 忽略 所有 错误, 除了 上述的 错误,
       ENOMEME2BIG.  如果 发生  这三类  错误,  他们  就  返回.  而  现在的
       做法是, 不仅仅 上述的 错误, 任何 错误 均导致 函数 返回.

 (CONFORMING TO)
       execl,   execv,   execle,   execlpexecvp  遵  IEEE  Std1003.1-88
       (``POSIX.1'').

[<xuming@users.sourceforge.net>

[2003/05/13

Linuxanhttp://cmpp.linuxforum.net