[解決済み] C言語で実行ファイルの場所を見つけるにはどうしたらいいですか?[重複]する
質問
C/C++で、現在実行されているプログラムの場所(フルパス)を見つける方法はありますか?
(の問題)。
argv[0]
は、フルパスが与えられないということです)。
解決方法は?
まとめると
-
のあるUnixでは
/proc
は、本当にストレートで現実的な方法です。-
readlink("/proc/self/exe", buf, bufsize)
(リナックス) -
readlink("/proc/curproc/file", buf, bufsize)
(FreeBSD) -
readlink("/proc/self/path/a.out", buf, bufsize)
(ソラリス)
-
-
がないUnixの場合
/proc
(つまり、上記が失敗した場合)。-
argv[0] が "/" (絶対パス)で始まる場合、このパスが使用されます。
-
それ以外の場合、argv[0] に "/" (相対パス)が含まれていれば、それを cwd に追加します。 (まだ変更されていないと仮定して)。
-
にあるディレクトリを検索します。
$PATH
実行可能なargv[0]
.
その後、実行ファイルが実際にシンボリックリンクでないかどうかをチェックするのが妥当でしょう。 もしそうなら、シンボリックリンクのディレクトリに相対的に解決してください。
このステップは、/procメソッドでは必要ありません(少なくともLinuxの場合)。 そこでは proc シンボリックリンクは実行ファイルを直接指しています。
を設定するのは、呼び出し側のプロセス次第であることに注意してください。
argv[0]
を正しく表示します。 ほとんどの場合は正しいのですが、呼び出し元のプロセスが信頼できない場合もあります (例: setuid executable)。 -
-
Windowsの場合
GetModuleFileName(NULL, buf, bufsize)
関連
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] ファイルのフルパスを取得する方法は?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] [Solved] プログラムが実行されているディレクトリを取得するには?
-
[解決済み] 実行ファイルのパスを取得する