2013-08-28 48 views
1

正如在SO上提到的,/ proc/self/exe上的readlink可用於獲取linux上的可執行文件路徑。 man 2 readlink建議應該使用lstat來提取所需的路徑長度。但是,當我stat/proc/self/exe時,st_size成員設置爲0.我如何獲得分配緩衝區的長度?獲取/ proc/self/exe符號鏈接的長度

回答

0

在實踐中,我會傾向於使用一個合理的規模(如256或1024,或PATH_MAX)爲readlink/proc/*/exe(或/proc/self/exe

的一點是,幾乎總是,可執行文件都應該被人類開始,因此無論是PATH(爲execvp(3)或一些shell)或整個文件路徑是對人友好的。我不知道任何明確使用非常長的文件名的人(在某些終端屏幕上不適合寬度)。我從來沒有聽說過文件名超過一百字節的可執行程序(或腳本)。因此,只需使用一些合理大小的本地緩衝區(如果需要的話,也可以使用strdup)。並且readlink(2)返回緩衝區中有意義字節的數量(所以如果你真的在意,請增大緩衝區並進行循環,直到它適合)。

對於/proc/self/exereadlink,我會做成256個字節的緩衝區在初始化,並中止(具有有意義的錯誤消息),如果它不適合(或失敗,例如因爲/proc/未安裝)。

1

man 2 lstat/proc目錄下拍攝,NOTES

下,對於大多數文件,統計()不返回 在st_size字段中指定文件的大小;而不是場返回 與值0

這就是爲什麼它不工作