gpt4 book ai didi

c++ - 如何找到 C 中可执行文件的位置?

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:11 24 4
gpt4 key购买 nike

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/15737747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com