如 SO 所述,/proc/self/exe 上的 readlink 可用于获取 linux 上的可执行路径。man 2 readlink 建议应该使用 lstat 来提取所需的路径长度。但是,当我 stat /proc/self/exe 时,st_size 成员设置为 0。如何获得分配缓冲区的长度?
问问题
1472 次
2 回答
1
取自man 2 lstat
, 在 NOTES 下
对于/proc 目录下的大多数文件,stat() 不会在st_size 字段中返回文件大小;相反,该字段返回值为 0。
这就是为什么它不起作用
于 2013-08-28T09:58:27.627 回答
0
在实践中,我倾向于使用合理的大小(例如 256 或 1024,或PATH_MAX
)来readlink
表示/proc/*/exe
(或/proc/self/exe
)
关键是几乎总是,可执行文件应该由人类启动,因此PATH
(对于execvp(3)或某些 shell)或整个文件路径都是人类友好的。我不知道有任何人明确使用很长的文件名(在某些终端屏幕中不适合宽度)。我从未听说过文件名超过一百字节的可执行程序(或脚本)。
因此,只需使用一些合理大小的本地缓冲区(strdup
如果需要,可能会成功)。readlink (2)返回其缓冲区中有意义的字节数(因此,如果您真的很在意,请扩大缓冲区并进行循环直到适合为止)。
对于readlink
of /proc/self/exe
,我会在初始化时将其放入一个 256 字节的缓冲区,如果它不适合(或失败,例如因为/proc/
未安装),则中止(带有有意义的错误消息)。
于 2013-08-28T10:02:54.427 回答