linux — stat () не находит файл в переполнении стека

в Linux 12.04
У меня есть исполняемый файл, расположенный в скажем:

/a/b/exe

и файл конфигурации на

/a/b/config

при выполнении:

cd /a/b/
./exe

все в порядке, и функция stat находит файл config в / 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;
}

-1

Решение

В первом случае cd ..., run exe вы изменяете текущий рабочий каталог перед выполнением программы, во втором случае вы запускаете exe без изменения текущего рабочего каталога, и я думаю, что в вашей программе вы используете относительный путь для открытия вашей конфигурации (например, ./config или просто config) и он не может найти его из текущего рабочего каталога. Самый простой обходной путь — изменить рабочий каталог при запуске вашего приложения:

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
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]