Is there a way in C/C++ to find the location (full path) of the current executed program?
(The problem with
argv is that it does not give the full path.)
On Unixes with
/proc really straight and realiable way is to:
readlink("/proc/self/exe", buf, bufsize) (Linux)
readlink("/proc/curproc/file", buf, bufsize) (FreeBSD)
readlink("/proc/self/path/a.out", buf, bufsize) (Solaris)
On Unixes without
/proc (i.e. if above fails):
If argv starts with "/" (absolute path) this is the path.
Otherwise if argv contains "/" (relative path) append it to cwd (assuming it hasn't been changed yet).
Otherwise search directories in
$PATH for executable
Afterwards it may be reasonable to check whether the executable isn't actually a symlink. If it is resolve it relative to the symlink directory.
This step is not necessary in /proc method (at least for Linux). There the proc symlink points directly to executable.
Note that it is up to the calling process to set
It is right most of the times however there are occasions when the calling process cannot be trusted (ex. setuid executable).
On Windows: use
GetModuleFileName(NULL, buf, bufsize)