Linux/UnixでC++でアプリケーションディレクトリを取得するにはどうすればよいですか。getcwd()
アプリケーションが実行されたディレクトリを返しますが、ビルドが置かれている実際のディレクトリが必要です。
私はあなたがこれを得ることができることを知っていますがmain()
、私は実際にそれにアクセスすることができません、そして私はあなたがそれに頼ることができないと言われました(それは本当ですか?)。
あなたはこの答えを見ることができます:
一般に、UNIXシステムでは、実行可能ファイルをまだ指しているファイルまたはディレクトリさえあると想定することはできません。たとえば、プログラムの実行中にファイル/ディレクトリが削除された可能性があります(これはWindowsでは不可能ですが、unix / linuxでは問題ありません)。反対側には、同じ物理ファイル(ハードリンク)を指している複数の名前が存在する可能性がありますが、いずれも主要な名前ではありません...この場合のファイルの「名前」は何ですか?
プログラムを指している名前が多数あるか、まったくない可能性があるため、プログラムの名前を取得するための安全なポータブルな方法はありません。プログラムの名前を見つけなければならない場合、それはあなたが何か間違ったことをしようとしていることを意味し、おそらくより良い解決策があります。
編集:
すべての*xシステムに一般的な移植可能なアプローチはありませんが、Linuxでは、この名前を使用し/proc/self/exe
て実行可能ファイルを開くことができます。これは、ファイルがどのディレクトリからもポイントされていない場合でも機能します(たとえば、実行中にファイルが「削除」された場合でも)。実行中のプロセスの実際のファイル(inode)は、プロセスがまだ実行中の場合は常に利用可能です。欠落している可能性があるのは、ファイルの名前(つまり、そのiノードを指すディレクトリリスト)です。
argv [0]は、実行可能ファイルへのフルパスを提供します-これが一般的な標準であるかどうかはわかりません