Как вы заметили, argv[0]
может (но не всегда) содержать полный путь вашего исполняемого файла.Если вам нужно только имя файла, одно из решений:
#include <libgen.h>
const char *proName = basename(argv[0]);
Как заметил Мэт, argv[0]
не всегда надежен - хотя обычно так и должно быть.Это зависит от того, что именно вы пытаетесь выполнить.
Тем не менее, есть альтернативный способ получения имени исполняемого файла в Mac OS X:
#include <mach-o/dyld.h>
#include <libgen.h>
uint32_t bufsize = 0;
// Ask _NSGetExecutablePath() to return the buffer size
// needed to hold the string containing the executable path
_NSGetExecutablePath(NULL, &bufsize);
// Allocate the string buffer and ask _NSGetExecutablePath()
// to fill it with the executable path
char exepath[bufsize];
_NSGetExecutablePath(exepath, &bufsize);
const char *proName = basename(exepath);