一尘不染

如何在C中找到可执行文件的位置?

linux

C / C ++中是否可以找到当前已执行程序的位置(完整路径)?

(问题argv[0]在于它没有给出完整的路径。)


阅读 411

收藏
2020-06-02

共1个答案

一尘不染

总结一下:

  • 在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)
2020-06-02