Subject: How can an executing program determine its own pathname?
Date: Thu Mar 18 17:16:55 EST 1993

4.4) 実行中のプログラムのパス名を求めるにはどうしたらよいでしょうか。

argv[0] を見てそれが "/" で始まっているのでしたら、多分それが実行中の プログラムの絶対パス名です。"/"で始まっていない場合には、プログラム中 で環境変数 PATH に設定されたディレクトリを全部検索し、最初に見つかった 実行可能ファイルで、argv[0] (実行しているファイルの名前が格納されてい ることになっています)と同じ名前を持つものが実行中のプログラムでしょう。 見つけたディレクトリ名と argv[0]の値とをつなぎ合わせたものがおそらく正 しい絶対パス名でしょう。

しかしながら本当に正しい名前かどうかを確かめることは出来ません。何故な ら、あるプログラムが argv[0] に好きな値を入れて別のプログラムを exec() することが禁止されているわけではないからです。argv[0] にプログラムの実 行可能ファイル名を設定してから新しいプログラムを exec するのは単に慣例 に過ぎません。

上記のことを示すためだけの例を挙げます:

    
#include <stdio.h>
main()
{
    execl("/usr/games/rogue", "vi Thesis", (char *)NULL);
}
実行したプログラムは自分の名前 (プログラムの argv[0] の値) を "vi Thesis" だと思い込みます (他のプログラムも現在実行中のプログラムの名前 が "vi Thesis" であると信じ込みます。でも、これは仮の例だから試さない で下さいね:-))。


UNIX FAQ LIST / Copyright(c)1994,Ted Timar / tmatimar@isgtec.com


Maintainer: あさだ たくや