Man page - exec(3)

Packages contains this manual

Available languages:

en fr pl ja zh_TW zh_CN de

Manual

EXEC

NAME
總 覽 (SYNOPSIS)
描 述 (DESCRIPTION)
返 回 值 (RETURN VALUE)
檔 案 (FILE)
錯 誤 (ERROR)
另 見 (SEE ALSO)
相 容 性 (COMPATIBILITY)
遵 循 (CONFORMING TO)
[中 文 版 維 護 人 ]
[中 文 版 最 新 更 新 ]
《 中 國 Linux論 壇 man手 冊 頁 翻 譯 計 劃 》


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 指 標 結 束 !

execv execvp 函 式 提 供 指 向 null 結 尾 的 字 串 的 指 標 陣 列 作 為 新 程 式 的 引 數 列 表 . 作 為 約 定 , 指 標 陣 列 中 第 一 個 元 素 應 該 指 向 執 行 程 式 名 自 身 . 指 標 陣 列 必 須 NULL 指 標 結 束 !

execle 函 式 同 時 說 明 了 執 行 程 序 的 環 境 (environment), 他 在 NULL 指 標 後 面 要 求 一 個 附 加 引 數 , NULL 指 標 用 於 結 束 引 數 列 表 , 或 者 說 , argv 陣 列 . 這 個 附 加 引 數 是 指 向 null 結 尾 的 字 串 的 指 標 陣 列 , 他 必 須 NULL 指 標 結 束 ! 其 他 函 式 從 當 前 程 序 的 environ 外 部 變 數 中 獲 取 新 程 序 的 環 境 .

某 些 函 式 有 特 殊 的 語 義 .

如 果 提 供 的 檔 名 中 不 包 含 斜 槓 符 (/), 函 式 execlp execvp 將 同 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 在 這 兒 採 取 了 傳 統 的 "當 前 目 錄 優 先 " 預 設 路 徑 .

當 試 圖 執 行 程 式 並 且 發 生 錯 誤 的 時 候 , execlp execvp 的 行 為 是 歷 史 習 慣 , 但 是 沒 有 進 入 正 式 文 件 , 也 沒 有 被 POSIX 標 準 說 明 . BSD (可 能 還 有 其 他 系 統 ) 中 程 序 自 動 進 入 睡 眠 , 如 果 發 生 ETXTBSY, 他 們 就 重 試 . 而 Linux 視 此 為 嚴 重 錯 誤 , 並 且 立 即 返 回 .

傳 統 的 做 法 中 , 函 式 execlp execvp 忽 略 所 有 錯 誤 , 除 了 上 述 的 錯 誤 , ENOMEM E2BIG . 如 果 發 生 這 三 類 錯 誤 , 他 們 就 返 回 . 而 現 在 的 做 法 是 , 不 僅 僅 上 述 的 錯 誤 , 任 何 錯 誤 均 導 致 函 式 返 回 .

遵 循 (CONFORMING TO)

execl , execv , execle , execlp execvp 遵 循 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