Provided by: manpages-zh_1.6.4.3-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

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

       http://cmpp.linuxforum.net

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

BSD MANPAGE                                        1993-11-29                                            EXEC(3)