1

如 SO 所述,/proc/self/exe 上的 readlink 可用于获取 linux 上的可执行路径。man 2 readlink 建议应该使用 lstat 来提取所需的路径长度。但是,当我 stat /proc/self/exe 时,st_size 成员设置为 0。如何获得分配缓冲区的长度?

4

2 回答 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)返回其缓冲区中有意义的字节数(因此,如果您真的很在意,请扩大缓冲区并进行循环直到适合为止)。

对于readlinkof /proc/self/exe,我会在初始化时将其放入一个 256 字节的缓冲区,如果它不适合(或失败,例如因为/proc/未安装),则中止(带有有意义的错误消息)。

于 2013-08-28T10:02:54.427 回答