如何在C中找到可执行文件的位置?
C / C ++中是否可以找到当前已执行程序的位置(完整路径)?
(问题argv[0]
在于它没有给出完整的路径。)
回答:
总结一下:
在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)
以上是 如何在C中找到可执行文件的位置? 的全部内容, 来源链接: utcz.com/qa/403479.html