CPP C++ logo

Позвонил мне друг, и сказал – “а игра то не запускается, если текущий путь не корень игрушки”. Проверил, все верно – игра не может загрузить ресурсы, т.к. ищет их относительно текущего каталога. Ясно, решение простое – найти путь, где лежит исполнимый файл, и уже относительно этого пути грузить ресурсы.

Гуглим – ничего не находим, придется думать…
Опускаю подробности, привожу универсальный код (Windows, Linux, Mac OS X):

char path[PATH_MAX];
strcpy(pPath, argv[0]);
char* end;
if((end = strrchr(path, '\\')) == 0 &&
  (end = strrchr(path, '/')) == 0)
{
  exit(-1);
}
*(end + 1) = 0;

Linux-specific решение

char path[PATH_MAX];
int len = readlink("/proc/self/exe", path, PATH_MAX - 1);
path[len] = 0;
printf("%s\n", path);