Linux 正在获取/proc/self/exe符号链接的长度

Linux 正在获取/proc/self/exe符号链接的长度,linux,symlink,stat,Linux,Symlink,Stat,如前所述,/proc/self/exe上的readlink可用于获取linux上的可执行文件路径。man 2 readlink建议使用lstat提取所需的路径长度。但是,当I stat/proc/self/exe时,st_size成员设置为0。如何获取分配缓冲区的长度?摘自《注释》下的man 2 lstat 对于/proc目录下的大多数文件,stat()不会返回 st_size字段中的文件大小;而是返回字段 值为0 这就是它不起作用的原因摘自《注释》下的《人类2号卫星》 对于/proc目录下的大

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

摘自《注释》下的
man 2 lstat

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


这就是它不起作用的原因

摘自《注释》下的《人类2号卫星》

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


这就是为什么它不起作用的原因

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

关键是,几乎所有的可执行文件都应该由人启动,因此
路径
(for或某个shell)或整个文件路径都是人性化的。我不知道有谁明确地使用很长的文件名(在某些终端屏幕上宽度不合适)。我从未听说过文件名超过100字节的可执行程序(或脚本)

因此,只要使用一个大小合理的本地缓冲区(如果需要的话,还可以在成功时使用
strdup
it)。并返回其缓冲区中有意义的字节数(因此,如果您真的关心,请增大缓冲区并进行循环,直到合适为止)


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

实际上,我倾向于使用一个合理的大小(例如256或1024,或
PATH\u MAX
)对于
/proc/*/exe
(或
/proc/self/exe
)的
readlink

关键是,几乎所有的可执行文件都应该由人启动,因此
路径
(for或某个shell)或整个文件路径都是人性化的。我不知道有谁明确地使用很长的文件名(在某些终端屏幕上宽度不合适)。我从未听说过文件名超过100字节的可执行程序(或脚本)

因此,只要使用一个大小合理的本地缓冲区(如果需要的话,还可以在成功时使用
strdup
it)。并返回其缓冲区中有意义的字节数(因此,如果您真的关心,请增大缓冲区并进行循环,直到合适为止)

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