-1

Linux 12.04では、次の場所に実行可能ファイルがあります。

/a/b/exe

そして設定ファイル

/a/b/config

するとき:

cd /a/b/
./exe

すべて問題なく、stat 関数は /a/b/ でファイル構成を見つけます

ただし、ルートから実行する場合

/a/b/exe

統計は構成ファイルを見つけられません

理由はありますか?

exeのフォルダーから実行されていないスクリプトを使用してバイナリを実行することはできません。

編集

呼び出しは次のようになります。

struct stat stFileInfo;
bool blnReturn;
int intStat;

// Attempt to get the file attributes
intStat = stat(strFilename.c_str(),&stFileInfo);
if(intStat == 0) {
// We were able to get the file attributes
// so the file obviously exists.
    blnReturn = true;
} else {
// We were not able to get the file attributes.
// This may mean that we don't have permission to
// access the folder which contains this file. If you
// need to do that level of checking, lookup the
// return values of stat which will give you
// more details on why stat failed.
    blnReturn = false;
}
4

1 に答える 1

2

最初のケースcd ..., run exeでは、プログラムを実行する前に現在の作業ディレクトリを変更し、2番目のケースでは、現在の作業ディレクトリを変更せずにexeを起動します。プログラムでは、相対パスを使用して構成を開きます(たとえば./config、または単にconfig)。 t現在の作業ディレクトリから検索します。最も簡単な回避策は、アプリの起動時に作業ディレクトリを変更することです。

int main(int argc, char** argv) {
    std::string s( argv[0] );  // path to the program
    std::string::size_type n = s.rfind( '/' );
    if( n != std::string::npos ) {
        std::system( ("cd " + s.substr(0, n)).c_str() );
    }

    // rest of your code
}
于 2012-10-22T16:58:34.787 に答える