La respuesta principal a esta pregunta enumera las técnicas para una gran cantidad de sistemas operativos.
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 );
}
En Linux (¿Posix?) tienes un enlace simbólico /proc/self/exe
que enlaza con la ruta completa del ejecutable.
En Windows, use GetModuleFileName
.
Nunca confíes en argv[0]
, que no se garantiza que sea útil.
Tenga en cuenta que las rutas y los sistemas de archivos no forman parte del lenguaje y, por lo tanto, son necesariamente una función que depende de la plataforma.