总结一下:
在Unix上,
/proc
真正可行的方法是:readlink("/proc/self/exe", buf, bufsize)(Linux)readlink("/proc/curproc/file", buf, bufsize)(FreeBSD)readlink("/proc/self/path/a.out", buf, bufsize)(Solaris)
在没有Unix的Unix上
/proc
(即,如果以上失败):如果argv [0]以“ /”(绝对路径)开头,则为路径。
否则,如果argv [0]包含“ /”(相对路径),则将其附加到cwd(假设尚未更改)。
否则,在目录中搜索
$PATH
可执行文件argv[0]
。
之后,检查可执行文件是否实际上不是符号链接可能是合理的。如果解决,则相对于symlink目录。
/ proc方法中不需要此步骤(至少对于Linux)。proc符号链接在那里直接指向可执行文件。
请注意,取决于调用过程的
argv[0]正确设置。在大多数情况下是正确的,但是有时调用进程不能被信任(例如setuid可执行文件)。
- 在Windows上:使用
GetModuleFileName(NULL, buf, bufsize)



