| 総合手引 | セクション 3 | English | Deutsch | オプション |
#include <unistd.h>extern char **environ;
これらの関数の初期引数は、実行されるファイルのパス名です。
execl(), execlp(), および execle() の各関数の const char *arg および後続の省略記号は arg0, arg1, amp;..., argn と考えることができます。これらは実行された プログラムに利用できる引数リストを表す ナル文字で終わるストリングを指す 1 つまたは複数のポインタのリストを記述します。慣行で、最初の引数は、実行中の ファイルに対応するファイル名を指す必要があります。 引数のリストは NULL ポインタで終了させる 必要があり ます。
exect(), execv(), および execvp() の各関数は、新しいプログラムに利用できる引数リストを表す ナル文字で終わるストリングを指すポインタの配列を提供します。 慣行で、最初の引数は、実行中のファイルに対応するファイル名を 指す必要があります。 ポインタの配列は NULL ポインタで終了する 必要があり ます。
execle() と exect() の各関数も、実行されたプロセスの環境を指定します。 そのためには、パラメータリスト内にある引数リストを終了させる NULL ポインタ、または追加パラメータとともに argv 配列を指すポインタに従います。 この追加のパラメータは、ナル文字で終わるストリングを指すポインタの 配列であり、 NULL ポインタで終了される 必要があり ます。 他の関数は、現在のプロセス内の外部変数 environ から新しいプロセスイメージ用の環境を取り上げます。
これらの関数には特別な意味論のあるものもあります。
execlp() と execvp() の各関数は、指定されたファイル名にスラッシュ "/" が含まれていない場合、実行可能ファイルを検索してシェルの処置を複製します。 検索パスは " PATH" 変数によって環境内で指定されたパスです。 この値が指定されない場合、 <paths.h> の _PATH_DEFPATH 定義に従い、デフォルトのパスが設定されます。 これは、 " /bin:/usr/bin:" に設定されています。 さらに、特定のエラーが特別に取り扱われます。
エラーが曖昧な場合(簡単にするために、ここでは ENOEXEC 以外のすべてのエラーを曖昧と考えます。ただし、致命的なエラー EACCES だけが真に曖昧です)、 これらの関数は、ファイルを開始して、ファイルが存在するか、そして適切な実行 パーミッションがあるかを判定するかのように動作します。そうである場合、 これらの関数は execve() によって設定された値に復元されたグローバル変数 errno でただちに戻ります。 そうでない場合、検索が継続します。 検索が execve() の実行に成功せず、またはエラーのために終了せずに完了すると、 これらの関数は、適切な実行パーミッションのある少なくとも 1 つのファイルが 見つかったかどうかに従って、グローバル変数 errno を EACCES または ENOENT に設定して戻ります。
ファイルのヘッダが認識されない(試みた execve() が ENOEXEC を返した)場合、 これらの関数は、最初の引数としてファイルのパスがあるシェルを実行します (この試みが失敗した場合、それ以上の検索は行われません)。
exect() 関数は、プログラムトレース機能を有効にしてファイルを実行します ( ptrace(2) を参照)。
exect() と execv() は、ライブラリ関数 execve(2) について指定されたエラーに 関して errno を設定する可能性があります。
ファイルを実行しようとしている間にエラーが発生したときの execlp() と execvp() の動作は、あまり歴史的な慣行ではなく、従来から ドキュメント化されておらず、 POSIX 標準で指定されていません。
従来、 execlp() 関数と execvp() 関数は、上記のもの、および ETXTBSY, ENOMEM と E2BIG を除いてすべてのエラーを無視しました。 ETXTBSY でこれらの関数は 数秒間、スリープした後で再試行し、 ENOMEM と E2BIG でこれらの関数は 返ります。 これらは現在 ETXTBSY について戻り、存在と実行可能性をもっと注意深く判定します。 特に、パス接頭語内のアクセスできないディレクトリを表す EACCES が、不適切な実行パーミッションのあるファイルについての EACCES と混乱されないようになっています。 BSD 4.4 で、これらの関数は、 EACCES, ENOENT, ENOEXEC および ETXTBSY 以外のすべてのエラーで戻りました。 これは従来のエラー処理より劣ったものでした。パス接頭語についてのエラーの 無視を破り、異常に曖昧なエラー EFAULT と異常なエラー EIO の処理を改良するだけだからです。 動作は sh(1) の動作と一致するように変更されました。
| EXEC (3) | January 24, 1994 |
| 総合手引 | セクション 3 | English | Deutsch | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
| “ | Not only is UNIX dead, it's starting to smell really bad. | ” |
| — Rob Pike | ||