It seems to me that Linux has it easy with /proc/self/exe. But I'd like to know if there is a convenient way to find the current application's directory in C/C++ with cross-platform interfaces. I've seen some projects mucking around with argv, but it doesn't seem entirely reliable.
If you ever had to support, say, Mac OS X, which doesn't have /proc/, what would you have done? Use #ifdefs to isolate the platform-specific code (NSBundle, for example)? Or try to deduce the executable's path from argv, $PATH and whatnot, risking finding bugs in edge cases?
Some OS-specific interfaces:
_NSGetExecutablePath()(man 3 dyld)
sysctl CTL_KERN KERN_PROC KERN_PROC_PATHNAME -1
readlink /proc/curproc/file(FreeBSD doesn't have procfs by default)
The portable (but less reliable) method is to use
argv. Although it could be set to anything by the calling program, by convention it is set to either a path name of the executable or a name that was found using
Some shells, including bash and ksh, set the environment variable "
_" to the full path of the executable before it is executed. In that case you can use
getenv("_") to get it. However this is unreliable because not all shells do this, and it could be set to anything or be left over from a parent process which did not change it before executing your program.