Linuxコマンドを学ぶ - execv

execl、execlp、execle、execv、execvp - ファイルを実行する

シノプシス

#include

extern char ** environ;

int execl(const char * パス 、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 []);

exec関数の説明

関数のexecファミリは、現在のプロセスイメージを新しいプロセスイメージに置き換えます。 このマニュアルページで説明している関数は、関数execve (2)のフロントエンドです。 (現在のプロセスの置き換えの詳細については、 execveのマニュアルページを参照してください。)

これらの関数の最初の引数は、実行されるファイルのパス名です。

execlexeclp 、およびexecle関数のconst char * argとそれに続く省略記号は、 arg0arg1 、...、 argnと考えることができます。 一緒に実行されたプログラムが利用できる引数リストを表すヌル終端文字列へのポインタのリストを記述します。 規則の第1引数は、実行中のファイルに関連付けられたファイル名を指す必要があります。 引き数のリストは、 NULLポインターで終了する必要あります。

execv関数とexecvp関数は、新しいプログラムが利用できる引数リストを表すヌル終端文字列へのポインタの配列を提供します。 規則の第1引数は、実行中のファイルに関連付けられたファイル名を指す必要があります。 ポインタの配列は、 NULLポインタで終了する必要あります。

execle関数は、パラメータリスト内の引数のリストを終了するNULLポインタ、または追加のパラメータを指定してargv配列へのポインタをたどることによって、実行されたプロセスの環境も指定します。 この追加パラメータは、NULLで終了する文字列へのポインタの配列でありNULLポインタで終了する必要あります。 他の関数は、現在のプロセスの外部変数environから新しいプロセスイメージの環境を取得します。

これらの関数の中には特別なセマンティクスがあります。

execlpexecvp関数は、指定されたファイル名にスラッシュ(/)文字が含まれていない場合、実行可能ファイルを検索する際にシェルのアクションを複製します。 検索パスは、 PATH変数によって環境内で指定されたパスです。 この変数が指定されていない場合は、デフォルトのパス ``:/ bin:/ usr / bin ''が使用されます。 さらに、特定のエラーは特別に扱われます。

ファイルに対するアクセス権が拒否された場合(試みられたexecveEACCESを返しました)、これらの関数は検索パスの残りの部分の検索を続けます。 ただし、他のファイルが見つからない場合は、グローバル変数errnoEACCESに設定して戻ります

ファイルのヘッダーが認識されない場合(試みられたexecveENOEXECを返した場合 )、これらの関数はファイルのパスを最初の引数としてシェルを実行します。 (この試みが失敗した場合、それ以上の検索は行われません)。

exec関数の戻り値

exec関数のいずれかが戻ると、エラーが発生します。 戻り値は-1で、グローバル変数errnoはエラーを示すように設定されます。