EXEC

Section: C Library Functions (3)
索引 jman

BSD mandoc
 

索引

名称

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

索引

ライブラリ

Lb libc  

索引

書式

In unistd.h Vt extern char **environ ; Ft int Fn execl const char *path const char *arg ... Ft int Fn execlp const char *file const char *arg ... Ft int Fn execle const char *path const char *arg ... Ft int Fn exect const char *path char *const argv[] char *const envp[] Ft int Fn execv const char *path char *const argv[] Ft int Fn execvp const char *file char *const argv[]  

索引

解説

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

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

Fn execl , Fn execlp , および Fn execle の各関数の Fa const char *arg および後続の省略記号は arg0 arg1 ..., argn と考えることができます。これらは実行された プログラムに利用できる引数リストを表す ナル文字で終わるストリングを指す 1 つまたは複数のポインタのリストを記述します。慣行で、最初の引数は、実行中の ファイルに対応するファイル名を指す必要があります。 引数のリストは NULL ポインタで終了させる 必要があり ます。

Fn exect , Fn execv , および Fn execvp の各関数は、新しいプログラムに利用できる引数リストを表す ナル文字で終わるストリングを指すポインタの配列を提供します。 慣行で、最初の引数は、実行中のファイルに対応するファイル名を 指す必要があります。 ポインタの配列は NULL ポインタで終了する 必要があり ます。

Fn execle と Fn exect の各関数も、実行されたプロセスの環境を指定します。 そのためには、パラメータリスト内にある引数リストを終了させる NULL ポインタ、または追加パラメータとともに argv 配列を指すポインタに従います。 この追加のパラメータは、ナル文字で終わるストリングを指すポインタの 配列であり、 NULL ポインタで終了される 必要があり ます。 他の関数は、現在のプロセス内の外部変数 environ から新しいプロセスイメージ用の環境を取り上げます。

これらの関数には特別な意味論のあるものもあります。

Fn execlp と Fn execvp の各関数は、指定されたファイル名にスラッシュ ``/ '' が含まれていない場合、実行可能ファイルを検索してシェルの処置を複製します。 検索パスは ``PATH '' 変数によって環境内で指定されたパスです。 この値が指定されない場合、 Aq paths.h の _PATH_DEFPATH 定義に従い、デフォルトのパスが設定されます。 これは、 ``/bin:/usr/bin: '' に設定されています。 さらに、特定のエラーが特別に取り扱われます。

エラーが曖昧な場合(簡単にするために、ここでは Er ENOEXEC 以外のすべてのエラーを曖昧と考えます。ただし、致命的なエラー Er EACCES だけが真に曖昧です)、 これらの関数は、ファイルを開始して、ファイルが存在するか、そして適切な実行 パーミッションがあるかを判定するかのように動作します。そうである場合、 これらの関数は Fn execve によって設定された値に復元されたグローバル変数 errno でただちに戻ります。 そうでない場合、検索が継続します。 検索が Fn execve の実行に成功せず、またはエラーのために終了せずに完了すると、 これらの関数は、適切な実行パーミッションのある少なくとも 1 つのファイルが 見つかったかどうかに従って、グローバル変数 errno を Er EACCES または Er ENOENT に設定して戻ります。

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

Fn exect 関数は、プログラムトレース機能を有効にしてファイルを実行します ( ptrace(2) を参照)。

 

索引

戻り値

Fn exec 関数が戻った場合、エラーが発生しているはずです。 戻り値は -1 であり、グローバル変数 errno が設定されてエラーを示します。  

索引

ファイル

/bin/sh シェル

 

索引

エラー

Fn execl , Fn execle , Fn execlp および Fn execvp は処理失敗し、ライブラリ関数 execve(2) および malloc(3) について指定されたエラーを指定する errno を設定する可能性があります。

Fn exect と Fn execv は、ライブラリ関数 execve(2) について指定されたエラーに 関して errno を設定する可能性があります。

 

索引

関連項目

sh(1), execve(2), fork(2), ktrace(2), ptrace(2), environ(7)  

索引

互換性

歴史的には Fn execlp 関数と Fn execvp 関数のデフォルトのパスは ``:/bin:/usr/bin '' です。これが、システムセキュリティを向上させるために 現在のディレクトリを最後に配置するよう変更されました。

ファイルを実行しようとしている間にエラーが発生したときの Fn execlp と Fn execvp の動作は、あまり歴史的な慣行ではなく、従来から ドキュメント化されておらず、 POSIX 標準で指定されていません。

従来、 Fn execlp 関数と Fn execvp 関数は、上記のもの、および Er ETXTBSY , Er ENOMEM と Er E2BIG を除いてすべてのエラーを無視しました。 Er ETXTBSY でこれらの関数は 数秒間、スリープした後で再試行し、 Er ENOMEM と Er E2BIG でこれらの関数は 返ります。 これらは現在 Er ETXTBSY について戻り、存在と実行可能性をもっと注意深く判定します。 特に、パス接頭語内のアクセスできないディレクトリを表す Er EACCES が、不適切な実行パーミッションのあるファイルについての Er EACCES と混乱されないようになっています。 BSD 4.4 で、これらの関数は、 Er EACCES , Er ENOENT , Er ENOEXEC および Er ETXTBSY 以外のすべてのエラーで戻りました。 これは従来のエラー処理より劣ったものでした。パス接頭語についてのエラーの 無視を破り、異常に曖昧なエラー Er EFAULT と異常なエラー Er EIO の処理を改良するだけだからです。 動作は sh(1) の動作と一致するように変更されました。

 

索引

規格

Fn execl , Fn execv , Fn execle , Fn execlp および Fn execvp は St -p1003.1-88 に準拠しています。


 

索引

Index

名称
ライブラリ
書式
解説
戻り値
ファイル
エラー
関連項目
互換性
規格

jman



Time: 07:06:48 GMT, January 12, 2009