得到/ proc / self / exe符号链接的长度

时间:2013-08-28 09:39:53

标签: linux symlink stat

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

2 个答案:

答案 0 :(得分:1)

取自man 2 lstat,在NOTES下

  

对于/ proc目录下的大多数文件,stat()不会返回   st_size字段中的文件大小;而是返回该字段   值为0。

这就是为什么它不起作用

答案 1 :(得分:0)

在实践中,我倾向于使用合理的大小(例如256或1024,或PATH_MAX)来readlink /proc/*/exe(或/proc/self/exe

重点是,几乎总是,可执行文件应该由人类启动,因此PATH(对于execvp(3)或某些shell)或整个文件路径都是人类友好的。我不知道任何明确使用很长文件名的人(在某些终端屏幕中不适合宽度)。我从未听说过文件名超过一百字节的可执行程序(或脚本)。

所以只需使用一个合理大小的本地缓冲区(如果需要,可能strdup成功)。并且readlink(2)返回其缓冲区中有意义字节的数量(因此,如果您真的在意,请增加缓冲区并进行循环直到它适合)。

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