【问题标题】:Getting length of /proc/self/exe symlink获取 /proc/self/exe 符号链接的长度
【发布时间】:2013-08-28 09:39:53
【问题描述】:

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

【问题讨论】:

    标签: linux symlink stat


    【解决方案1】:

    取自 man 2 lstat,在 NOTES 下

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

    这就是为什么它不起作用

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多