Provided by: manpages-zh_1.6.3.3-2_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

《中國Linux論壇man手冊頁翻譯計劃》

       http://cmpp.linuxforum.net

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh