<分区>
C/C++有没有办法找到当前执行程序的位置(完整路径)?
(argv[0]
的问题是它没有给出完整路径。)
<分区>
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/52096980/