Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

execve(2)

fork(2)

environ(7)

csh(1)

EXECL(3)  —  NEWS-OS Programmer’s Manual

名称

execl, execv, execle, execlp, execvp, exect, environ  −  ファイルを 実行する

形式

execl(name, arg0, arg1, ..., argn, 0)
char ∗name, ∗arg0, ∗arg1, ..., ∗argn;

execv(name, argv)
char ∗name, ∗argv[];

execle(name, arg0, arg1, ..., argn, 0, envp)
char ∗name, ∗arg0, ∗arg1, ..., ∗argn, ∗envp[];

execlp(name, arg0, arg1, ..., argn, 0)
char ∗name, ∗arg0, ∗arg1, ..., ∗argn;

execvp(name, argv)
char ∗name, ∗argv[];

exect(name, argv, envp)
char ∗name, ∗argv[], ∗envp[];

extern char ∗∗environ;

解説

これらのルーチンは、 execve システムコールへのさまざまなインターフェースを 提供しています。 その特性の詳細については、 execve(2) を参照してください。 ここでは概略説明だけを行います。

すべての形式の exec は、呼び出しプロセスを、指定したファイルで置き換えます。 それから、そのファイルのコアイメージのエントリポイントへ移ります。 正常終了時には、exec からのリターンはありません。 呼び出しプロセスのコアイメージが失われているからです。

name 引数は、 実行するファイル名へのポインタです。 ポインタの arg[0], arg[1] ... は、 ナルで終わる文字列のアドレスを指します。 慣例的に、 arg[0] はそのファイル名自身です。

2 つのインターフェースが使用可能です。 execl は、 既知の引数を持つ既知のファイルが呼び出されるときに有効です。 execl への引数は、 ファイルと文字列を構成する文字列です。 第1引数は慣例的に、 ファイル名(またはその最後の要素)と同じです。 引数リストは、 0 引数で終わらなければなりません。

execv バージョンは、 引数の数が前もってわからないときには便利です。 execv の引数は、 実行するファイル名と、 引数を含む文字列ベクタです。 最後の文字列引数は、 0 ポインタが後に続いていなければなりません。

exect バージョンは、 実行するファイルが ptrace(2) で扱われているときに使用されます。 プログラムは、 親プロセスにそのプログラムの状態を扱う機会を与えるため、 1 命令 1 ステップで実行されるよう強制されます。 これは、 NEWSの場合、 ステータスレジスターのトレースビットを設定することによって 行われます。

C プログラムが実行されるときには、 次のように呼び出しが行われます。

        main(argc, argv, envp)
        int argc;
        char ∗∗argv, ∗∗envp;

ここで argc は引数の数で、 argv は引数への文字列ポインタです。 示されているとおり、 argc は慣例的に少なくとも 1 で、 配列の最初の要素はファイル名を含む文字列を指しています。

argv[argc] は 0 ですから、 argv は別の execv の中でも直接使用可能です。

execle 等で、 envp はプロセスの environment (環境)を 設定する文字列配列へのポインタです。 各文字列は、 名前、 “=”、 およびナルで終わる値から構成されています。 ポインタ配列は、 ナルポインタで終わります。 シェル sh(1) は、 プログラムが呼び出されるときに定義されている各グローバルシェル変数に対して、 環境エントリを渡します。 慣例的に使用される名前については、 environ(7) を参照のこと。 Cのランタイム開始ルーチンは、 envp のコピーをグローバルセル environ の中に置きます。 environ は、 execv と execl によって使用されるもので、 現在のプログラムが実行する任意のサブプログラムに環境を渡します。

execlp と execvp は、 execl や execv と同じ引数で呼び出されますが、 ディレクトリリスト中で実行可能ファイルを検索するときには、 シェルの動作を重複させます。 ディレクトリリストは環境から得られます。

関連ファイル

/bin/sh execlp または execvp がコマンドファイルを 見つけた場合に呼び出されるシェル。

関連事項

execve(2), fork(2), environ(7), csh(1)

診断

ファイルが見つからない、 実行不可能、 正しいマジック番号で始まっていない (a.out(5) を参照)、 最大メモリを越える、 または引数の要求するスペースが大きすぎる場合には、 診断を設定します。 リターン値は −1 です。 スーパーユーザでも、 実行するファイルに対して、 少なくとも 1つの実行許可ビットが設定されていなければなりません。

バグ

シェルコマンドとなるファイルを実行するために execvp を呼び出し、 そのシェルの実行が不可能な場合には、 戻る前に argv[0] と argv[−1] の値が修正されます。

NEWS-OS Release 4.1C

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026