exec システム関数の種類と実行例 ― 2019年02月08日 14時32分38秒
exec 系は、配列を受け取る v 系と引数の羅列を受け取る l 系に別れてる。そして、実行ファイルを PATH に基づいて探すp 系と、環境変数を渡す事ができる e 系に更に別れる。 更に FreeBSD では、実行パスも渡せる P 関数とファイル名の代わりにファイルディスクリプタを渡せる f 関数がある。
-
execl
- 引数は羅列。 パスを指定。
-
execlp
- 引数は羅列。 プログラム名を指定。
-
execle
- 引数は羅列。 パスを指定。 環境変数を渡す。
-
execv
- 引数は配列。 パスを指定。
-
execvp
- 引数は配列。 プログラム名を指定。
-
execvP
- 引数は配列。 プログラム名を指定。 検索パスも指定。 FreeBSD 固有。
-
execve
- 引数は配列。 パスを指定。 環境変数を渡す。
-
fexecve
- 引数は配列。 ファイルディスクリプタを指定。 環境変数を渡す。
exec の分類が終ったところで、今度は引数の種類。
exec 関数の第一引数は全て新しい実行ファイル。プログラムは、パスを指定かファイル名を指定かに別れるが、ファイルは実際に存在しなければいけない。
環境変数 e 系の exec 関数は最後の引数が環境変数。文字列の配列として渡す。一つ一つの文字列が変数名と値を表すので、等号を挟んだタグ値式で記述される。
そして、exec 関数の第二以降の引数は、新しいプログラムに渡す引数。羅列 l 型の exec 関数は、引数の列の終りを示す NULL を最後に渡す必要がある。配列 v 型の文字列の最後の要素も NULL にする必要がある。l 型も v 型も最初の値は慣習的にプログラム名が入るが、getopt はこの最初の引数・値を飛ばすので、実際に実行するプログラムと違った値が入っていても、exec 関数は問題はない。
exec 関数は実行処理を新しいプログラムに渡してしまうので、成功すると戻って来ない。戻って来るのは新しいプログラムの起動に失敗したときになる。
各関数の使い方の例と共に、argv[0] の動作を見てみてたい。
次回。
最近のコメント