在另一个问题,回答指出,在Unix系统与/proc
,真正直接和可靠的方法是readlink("/proc/self/exe", buf, bufsize)
后,进入给备份解决方案如下:如何在正常方法失败时在Linux上找到可执行文件的位置?
在Unix系统中没有的/ proc(即,如果上面的失败) :
- 如果argv [0]以“/”(绝对路径)开头,则为路径。
- 否则,如果argv [0]包含“/”(相对路径),则将其追加到cwd(假设它尚未更改)。
getcwd(buf, bufsize); strncat(buf, "/", bufsize-strlen(buf)-1); strncat(buf, argv[0], bufsize-strlen(buf)-1);
- 否则搜索目录中
$PATH
可执行argv[0]
。
之后,检查可执行文件是否实际上不是符号链接可能是合理的。如果它解决了它相对于symlink目录。
现在,在我的情况,不幸的是,没有上述作品:
/proc/self/exe exists
但未能readlink()
由于许可被拒绝错误号13- 的
argv[0]
没有/
绝对或相对路径。 $PATH
不包含在argv[0]
中找到的可执行文件。
当sgid应用程序运行时,也会出现这个问题。在我的情况下,它不是sgid,而是inetd的启动。
是的,我认为,但这似乎是相当极端的解决这个问题。 – WilliamKF 2009-10-22 22:30:27