hirax.net::Keywords::「絶対パス」のブログ



2004-03-13[n年前へ]

今日の疑問 

 Linuxでg++でアプリケーションを作るときに、起動されたアプリケーションが「そのアプリケーションが置いてある場所」を知るにはどんな関数を使えば良いものなのでしょう?ファイル出力などが必要ない(system()+whichを使ってパスをファイルに吐いて、というようなものでない)方法はどんなものなのでしょう?

一般的な方法はないと思います。Unixのファイルシステムでは、バイナリはハードリンクで複数のパスを持てますし、ファイル実体からそのファイルのパスを参照する方法はありません。(極端な話、アプリケーション起動後にそのバイナリファイルをunlinkしてしまえば、「パスを持たないけれど走っているアプリケーション」になります---「このプログラムは実行終了後自動的に消滅する」ってわけです)。Unix上で、お望みの動作を得るのによく見る方法は、 * argv0を見て、それが絶対パスならそれを採用 * argv0を見て、それが相対パスならgetcwd()して絶対パスに直す * そうでなければ、PATH環境変数をひとつづつ探すというものです。上記の手順はよく使われるので、ライブラリもいくつか存在すると思います。例えばglib (www.gtk.org) の g_find_program_in_path()等は使えると思います。
 ありがとうございます。川合さん



■Powered by yagm.net