[cppll_novice:0767] Re: プログラムが決まったファイルを読み込む場合。
- Subject:
- [cppll_novice:0767] Re: プログラムが決まったファイルを読み込む場合。
- From:
- Masamichi Takatsu <taka2@...>
- Date:
- Tue, 18 Jan 2005 11:45:22 +0900
- X-Mailer:
- mnews [version 1.22PL6T1(IMAP4,UNICODE)] 2003-12/12(Fri)
- Message-Id:
- <050118114522.M0100468‐at‐XP.doga.jp>
- In-Reply-To:
- 762
たかつです。
> …欲しいのは現dirぢゃないのか。実行コードのあるdirか。うーむ…
> UNIX系にそんなAPIあるっけ? ふぉろーよろしく > だれぞ
それを知る方法は UNIX にはありません。
で、argv[0] の方も意味がある文字列になっているとは限らないのですが、
大抵の場合、 argv[0] にはシェルのコマンドラインに指定した文字列が
そのまま入っているものですから、実行ファイルのあるディレクトリを
知るには
・フルパス(/で始まる)の場合は、そのまま
・相対パスの場合(/が含まれる)は、カレントディレクトリと連結
・そうでなければ、環境変数 PATH から探索
といった処理を行うのが順当な手段かと思います。
もっとも、UNIX の場合は、プログラムと同じディレクトリにファイルを置く
なんていうのは邪道で、普通は
/usr/local/プログラム名/…
とか
/usr/local/etc/プログラム名/…
にハードコートするものだと思います。
詳しくは
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC23
こちらを読んでください。
PROJECT TEAM DoGA 高津正道 taka2@...
TBD00456@...
PROJECT TEAM DoGAのホームページ → http://doga.jp/
1月18日(火) 今日のマーフィーの法則 [ウインフィールドの「行く先の道順」の金言]
道を教える人が「簡単にわかりますよ」と言えば言うほど、迷子になりやすい。
> …欲しいのは現dirぢゃないのか。実行コードのあるdirか。うーむ…
> UNIX系にそんなAPIあるっけ? ふぉろーよろしく > だれぞ
それを知る方法は UNIX にはありません。
で、argv[0] の方も意味がある文字列になっているとは限らないのですが、
大抵の場合、 argv[0] にはシェルのコマンドラインに指定した文字列が
そのまま入っているものですから、実行ファイルのあるディレクトリを
知るには
・フルパス(/で始まる)の場合は、そのまま
・相対パスの場合(/が含まれる)は、カレントディレクトリと連結
・そうでなければ、環境変数 PATH から探索
といった処理を行うのが順当な手段かと思います。
もっとも、UNIX の場合は、プログラムと同じディレクトリにファイルを置く
なんていうのは邪道で、普通は
/usr/local/プログラム名/…
とか
/usr/local/etc/プログラム名/…
にハードコートするものだと思います。
詳しくは
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC23
こちらを読んでください。
PROJECT TEAM DoGA 高津正道 taka2@...
TBD00456@...
PROJECT TEAM DoGAのホームページ → http://doga.jp/
1月18日(火) 今日のマーフィーの法則 [ウインフィールドの「行く先の道順」の金言]
道を教える人が「簡単にわかりますよ」と言えば言うほど、迷子になりやすい。
▼ スレッド
- 756: いつもお世話になっている tetubou です。 ゲームなどの画像データのように、決まった名前の フ tetubou
- ├757: "int main()" の部分を "int main(int argc, char* argv[])" に変更して、argv[0]から実行exeのファイルパスを取 恣意の
- │├758: 老婆心ながら── argv[0] がロードモジュールのfull-pathになってる ってのはOS依存なのでご注意 FUKUDA, Fumiki
- ││└760: επιστημηさんの仰る通り、私の環境では argv[0] はフルパスに なっていませんでした。 自分 tetubou
- ││ └761: うーん…己自身がどこにあるかを知る、可搬性のあるAPIが 見当たらないからには条件コンパイ FUKUDA, Fumiki
- ││ └762: επιστημη@別解 Boost使いましょうか。 boost::filesystem::current_path() なんてのがあります。 ドキュ FUKUDA, Fumiki
- ││ ├765: あやふやなので出すのを迷いましたがメールしちゃいます。 Linuxだと readlink("/proc/self/exe", buf, bu Hisao Tsutsumi
- ││ ├766: UNIXではないですが、Qtにはありますね。 (実はQt使ったことないけど(^^;)) QApplication::applicationDirPa T.Sawamoto
- ││ ├767: それを知る方法は UNIX にはありません。 で、argv[0] の方も意味がある文字列になっているとは Masamichi Takatsu
- ││ └768: わかんないすが、 1.単純に環境変数に特定ディレクトリ を設定しておいて、getenv で読む 2.argv[1 OKI miyuki
- │└759: 私は、argv[0]が指す文字列はコマンドラインで実行ファイル名として タイプした文字列そのもの tetubou
- │ ├764: そすると、モジュールそのものを"モジュールディレクトリを基準に動作"する ものから"指定さ 恣意の
- │ └778: やはり、環境依存するかビルドの際に対応するという 方法になってしまうんですね。 tetubou
- └763: ↓の記事を参考に、tetubouさんにとって最適な方法を選んでみてはどうでしょうか? http://www.adl.ni Lichtenstein