.\" Copyright (c) 1991 The Regents of the University of California. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)exec.3 6.4 (Berkeley) 4/19/91 .\" .\" Converted for Linux, Mon Nov 29 11:12:48 1993, faith@cs.unc.edu .\" Updated more for Linux, Tue Jul 15 11:54:18 1997, pacman@cqc.com .\" .TH EXEC 3 1993-11-29 "BSD MANPAGE" "Linux Programmer's Manual" .SH NAME execl, execlp, execle, execv, execvp \- 執行某個檔案 .SH "總覽 (SYNOPSIS)" .B #include .sp .B extern char **environ; .sp .BI "int execl( const char *" path ", const char *" arg ", ...); .br .BI "int execlp( const char *" file ", const char *" arg ", ...); .br .BI "int execle( const char *" path ", const char *" arg .BI ", ..., char * const " envp "[]);" .br .BI "int execv( const char *" path ", char *const " argv "[]);" .br .BI "int execvp( const char *" file ", char *const " argv "[]);" .SH "描述 (DESCRIPTION)" .B exec 系列 函式 用 新的 程序 映象 置換 當前的 程序 映象. 本 手冊頁 描述的 這些 函式 實際上 是 對 .BR execve (2) 函式 的 前端(front-end) 包裝. (關於 當前程序 的 置換 詳見 .B execve 的 手冊頁.) .PP 這些 函式 的 第一個 引數 是 待執行 程式 的 路徑名(檔名). .PP 在 函式 .BR execl , .BR execlp , 和 .B execle 中, .I "const char *arg" 以及 省略號 代表 的 引數 可被 視為 .IR arg0 , .IR arg1 , \&..., .IR argn . 他們 合起來 描述了 指向 null 結尾的 字串 的 指標 列表, 即 執行程式 的 引數列表. 作為 約定, 第一個 arg 引數 應該 指向 執行程式名 自身. 引數列表 .I 必須 用 .B NULL 指標 結束! .PP .B execv 和 .B execvp 函式 提供 指向 null 結尾的 字串 的 指標陣列 作為 新程式 的 引數列表. 作為 約定, 指標陣列 中 第一個 元素 應該 指向 執行程式名 自身. 指標陣列 .I 必須 用 .B NULL 指標 結束! .PP .B execle 函式 同時 說明了 執行程序 的 環境(environment), 他 在 .B NULL 指標 後面 要求 一個 附加引數, NULL 指標 用於 結束 引數列表, 或者說, argv 陣列. 這個 附加引數 是 指向 null 結尾的 字串 的 指標陣列, 他 .I 必須 用 .B NULL 指標 結束! 其他 函式 從 當前程序 的 .I environ 外部變數 中 獲取 新程序 的 環境. .PP 某些 函式 有 特殊的 語義. .PP 如果 提供的 檔名 中 不包含 斜槓符(/), 函式 .B execlp 和 .B execvp 將 同 shell 一樣 搜尋 執行檔案. 搜尋路徑 由 環境變數 .B PATH 指定. 如果 該 變數 不存在, 則 使用 預設路徑 ``:/bin:/usr/bin''. 另外, 某些 錯誤 要 特殊處理. .PP 如果 對 某個 檔案 的 訪問 遭到 拒絕 ( .B execve 返回 .BR EACCES ), 這些 函式 將 在 搜尋路徑 中 繼續 尋找. 如果 沒有 找到 符合的 檔案, 他們 返回時 把 .I errno 置為 .BR EACCES . .PP 如果 無法 識別 檔案首部 ( .B execve 返回 .BR ENOEXEC ), 這些 函式 將 以 檔名 作為 第一個 引數 呼叫 shell. (如果 這個 嘗試 失敗 就 不再 進行 搜尋 了.) .SH "返回值 (RETURN VALUE)" 任何 .B exec 函式 返回 均 表明 發生了 錯誤. 返回值 是 \-1, 全域性變數 .I errno 指出 錯誤型別. .SH "檔案 (FILE)" .I /bin/sh .SH "錯誤 (ERROR)" 這些 函式 均可能 失敗, .I errno 被 置為 庫函式 .BR execve (2) 設定的 各種 錯誤型別. .SH "另見 (SEE ALSO)" .BR sh (1), .BR execve (2), .BR fork (2), .BR environ (5), .BR ptrace (2) .SH "相容性 (COMPATIBILITY)" 在 某些 其他系統 中, 預設路徑 (當 環境變數 \fBPATH\fR 不存在) 把 當前目錄 列在 .I /bin 和 .IR /usr/bin 後面, 這是 為了 防止 特洛伊木馬. Linux 在這兒 採取了 傳統的 "當前目錄優先" 預設路徑. .PP 當 試圖 執行 程式 並且 發生 錯誤 的 時候, .B execlp 和 .B execvp 的 行為 是 歷史 習慣, 但是 沒有 進入 正式文件, 也沒有 被 POSIX 標準 說明. BSD (可能 還有 其他 系統) 中 程序 自動 進入 睡眠, 如果 發生 ETXTBSY, 他們 就 重試. 而 Linux 視此為 嚴重錯誤, 並且 立即 返回. .PP 傳統的 做法中, 函式 .B execlp 和 .B execvp 忽略 所有 錯誤, 除了 上述的 錯誤, .B ENOMEM 和 .BR E2BIG . 如果 發生 這三類 錯誤, 他們 就 返回. 而 現在的 做法是, 不僅僅 上述的 錯誤, 任何 錯誤 均導致 函式 返回. .SH "遵循 (CONFORMING TO)" .BR execl , .BR execv , .BR execle , .B execlp 和 .B execvp 遵循 IEEE Std1003.1-88 (``POSIX.1''). .SH "[中文版維護人]" .B 徐明 .SH "[中文版最新更新]" .BR 2003/05/13 .SH "《中國Linux論壇man手冊頁翻譯計劃》" .BI http://cmpp.linuxforum.net .SH "跋" .br 本頁面中文版由中文 man 手冊頁計劃提供。 .br 中文 man 手冊頁計劃:\fBhttps://github.com/man-pages-zh/manpages-zh\fR