La risposta principale a questa domanda elenca le tecniche per un intero gruppo di sistemi operativi.
string get_path( )
{
char arg1[20];
char exepath[PATH_MAX + 1] = {0};
sprintf( arg1, "/proc/%d/exe", getpid() );
readlink( arg1, exepath, 1024 );
return string( exepath );
}
Su Linux (Posix?) hai un collegamento simbolico /proc/self/exe
che si collega al percorso completo dell'eseguibile.
Su Windows, usa GetModuleFileName
.
Non fare mai affidamento su argv[0]
, che non è garantito per essere qualcosa di utile.
Tieni presente che percorsi e file system non fanno parte del linguaggio e quindi sono necessariamente una caratteristica dipendente dalla piattaforma.