3

Python Fuse を使用してファイルシステムを実装しています。ディレクトリにはのみが含まれているため、メソッドsymlinksに戻ります。S_IFLNK | 0777getattr

ここで、ディレクトリに対して を実行すると、Linux がディレクトリ内のエントリに対してメソッドを 6 回続けてls呼び出すことに気付きました。readlink

それは私の側のバグですか、それとも通常の動作ですか?

4

2 に答える 2

2

まあ、間違いなく 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 回だけ呼び出します。私はヒューズについてあまり知りません。パイソンヒューズはあまり知りません。残念ながら、これはあなたの側のバグのある動作に非常に似ていると言う以外に、元の質問に答えることができませんが、間違っている可能性があります.

于 2010-08-08T11:38:00.343 に答える
1

getattr で st_size を正しく設定しましたか? ls は最初に、返された st_size のバッファー サイズで試行し、readlink バッファーが収まるまでそれを 2 倍にします。

于 2011-10-26T00:09:53.260 に答える