Python Fuse を使用してファイルシステムを実装しています。ディレクトリにはのみが含まれているため、メソッドsymlinks
に戻ります。S_IFLNK | 0777
getattr
ここで、ディレクトリに対して を実行すると、Linux がディレクトリ内の各エントリに対してメソッドを 6 回続けてls
呼び出すことに気付きました。readlink
それは私の側のバグですか、それとも通常の動作ですか?
まあ、間違いなく ls が 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 を呼び出すことはなく、長いフラグが指定されている場合は、リンクごとに 1 回だけ呼び出します。私はヒューズについてあまり知りません。パイソンヒューズはあまり知りません。残念ながら、これはあなたの側のバグのある動作に非常に似ていると言う以外に、元の質問に答えることができませんが、間違っている可能性があります.
getattr で st_size を正しく設定しましたか? ls は最初に、返された st_size のバッファー サイズで試行し、readlink バッファーが収まるまでそれを 2 倍にします。