在 C/C++ 中有没有办法找到当前执行程序的位置(完整路径)?
(argv[0]
的问题在于它没有给出完整的路径。)
最佳答案
总结一下:
在带有
/proc
的 Unix 上,真正直接可行的方法是:readlink("/proc/self/exe", buf, bufsize)
(Linux)readlink("/proc/curproc/file", buf, bufsize)
(FreeBSD)readlink("/proc/self/path/a.out", buf, bufsize)
(Solaris)
在没有
/proc
的 Unix 上(即如果上述方法失败):如果 argv[0] 以“/”(绝对路径)开头,这就是路径。
否则,如果 argv[0] 包含“/”(相对路径)将其附加到 cwd (假设尚未更改)。
否则在
$PATH
中的目录中搜索可执行文件argv[0]
。
之后检查可执行文件是否实际上不是符号链接(symbolic link)可能是合理的。 如果是相对于符号链接(symbolic link)目录解析它。
/proc 方法中不需要此步骤(至少对于 Linux 而言)。 proc 符号链接(symbolic link)直接指向可执行文件。
请注意,正确设置
argv[0]
取决于调用进程。 大多数情况下这是正确的,但是在某些情况下调用进程是不可信的(例如 setuid 可执行文件)。在 Windows 上:使用
GetModuleFileName(NULL, buf, bufsize)
关于c++ - 如何在 C 中找到可执行文件的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/933850/