作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在另一个问题中,答案是在带有 /proc
的 Unix 上,真正直接可靠的方法是 readlink("/proc/self/exe", buf, bufsize)
然后它继续提供备份解决方案,如下所示:
getcwd(buf, bufsize); strncat(buf, "/", bufsize-strlen(buf)-1);
strncat(buf, argv[0], bufsize-strlen(buf)-1);
$PATH
的目录中搜索可执行文件 argv[0]
。之后检查可执行文件是否实际上不是符号链接(symbolic link)可能是合理的。如果它是相对于符号链接(symbolic link)目录解析的。
不幸的是,就我而言,以上方法均无效:
/proc/self/exe 存在
但由于权限被拒绝 errno 13 而无法 readlink()
。argv[0]
没有绝对或相对路径的 /
。$PATH
不包含在 argv[0]
中找到的可执行文件。似乎在运行 sgid 应用程序时也会遇到此问题。在我的例子中,它不是 sgid,而是 inetd 启动。
最佳答案
解决这个问题的最好方法是在/etc/xinetd.d/myApp 配置文件中添加一个环境变量来指定二进制文件的位置,如下所示:
service myApp
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/local/bin/myAppd
env = MY_APP_HOME=/usr/local/bin
port = 2354
disable = no
}
然后,如果/proc/self/exe 的权限被拒绝,检查环境变量并改用它。
关于c++ - 当正常方法失败时如何在 Linux 上找到可执行文件的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1604132/
我是一名优秀的程序员,十分优秀!