我正在使用Python Fuse实现文件系统。目录仅包含symlinks,因此我在S_IFLNK | 0777方法上返回getattr

现在,当我在目录上执行ls时,我注意到Linux为目录中的每个条目连续6次调用readlink方法。

是我的错误还是正常的行为?

最佳答案

好吧,绝对不可以多次调用readlink。除非用不寻常的标志来调用它?

$ls
entropy  share
$ls -l
total 0
lrwxrwxrwx 1 entropy users 14 Aug  8 14:26 entropy -> /home/entropy/
lrwxrwxrwx 1 entropy users 11 Aug  8 14:18 share -> /usr/share/
$ltrace ls 2>&1 | grep readlink
$ltrace ls -l 2>&1 | grep readlink
readlink(0xbfdbb6c0, 0x9549b90, 15, 0, 0xb75ceec8) = 14
readlink(0xbfdbb6c0, 0x954a148, 12, 0xbfdbb992, 0) = 11
$

从这里的情况看,没有标志的ls从不调用readlink,如果给出了long标志,则每个链接只会调用一次。我对 fuse 了解不多,更不用说Python fuse 了。因此,很不幸,我无法回答您最初的问题,只能说这看起来很像您的 buggy ,但我可能是错的。

09-29 23:57