學習Linux命令 - execv

execl,execlp,execle,execv,execvp - 執行文件

概要

#include

extern char ** environ;

int execl(const char * path ,const char * arg ,...);
int execlp(const char * 文件 ,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 []);

exec函數的描述

exec系列功能用新的過程映像替換當前的過程映像。 本手冊頁中描述的功能是execve (2)函數的前端。 (有關替換當前進程的詳細信息,請參閱execve的手冊頁。)

這些函數的初始參數是要執行的文件的路徑名。

execlexeclpexecle函數中的const char * arg和隨後的省略號可以被認為是arg0arg1 ,..., argn 。 它們一起描述了一個或多個指向以空字符結尾的字符串的指針列表,這些字符串表示可執行程序可用的參數列表。 按照慣例,第一個參數應指向與正在執行的文件關聯的文件名。 參數列表必須NULL指針終止。

execvexecvp函數提供了一個指向null結尾字符串的指針數組,這些字符串表示新程序可用的參數列表。 按照慣例,第一個參數應指向與正在執行的文件關聯的文件名。 指針數組必須NULL指針終止。

execle函數還通過跟隨指針來指定已執行進程的環境,該指針終止參數列表中的參數列表或指向具有附加參數的argv數組的指針。 這個附加參數是一個指向空終止字符串的指針數組,並且必須由一個NULL指針終止。 其他函數在當前進程中從外部變量環境獲取新進程映像的環境

其中一些函數具有特殊的語義。

如果指定的文件名不包含斜杠(/)字符, execlpexecvp函數將復制shell搜索可執行文件的操作。 搜索路徑是PATH變量在環境中指定的路徑 。 如果未指定此變量,則使用默認路徑``:/ bin:/ usr / bin''。 另外,某些錯誤會被特別處理。

如果文件的權限被拒絕(嘗試的execve返回EACCES ),這些函數將繼續搜索搜索路徑的其餘部分。 但是,如果找不到其他文件,它們將返回全局變量errno,設置為EACCES

如果文件的頭部沒有被識別(試圖執行的execve返回ENOEXEC ),這些函數將執行該文件的路徑作為第一個參數的shell。 (如果此嘗試失敗,則不再進行搜索。)

返回exec函數的值

如果任何exec函數返回,則會發生錯誤。 返回值是-1,並且全局變量errno將被設置為指示錯誤。