Python Fuse连续6次调用“readlink”

我正在使用Python Fuse实现一个文件系统。 一个目录只包含symlinks ,因此我返回S_IFLNK | 0777 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 $ 

从这里的东西的外观没有标志永远不会调用readlink,并且如果给出长旗,每个链接只会调用一次。 我不太了解导火索,更不用说蟒蛇导火线。 所以不幸的是,我不能回答你原来的问题,除了说这看起来很像在你身边的越野车行为,但我可能是错的。

你在getattr中正确设置了st_size吗? ls将首先尝试使用返回的st_size的缓冲区大小,并将其加倍直到readlink缓冲区适合。