Python Fuse вызывает readlink 6 раз подряд - PullRequest
3 голосов
/ 03 августа 2010

Я реализую файловую систему, используя Python Fuse. Каталог содержит только symlinks, и поэтому я возвращаю S_IFLNK | 0777 по методу getattr.

Теперь, когда я делаю ls в каталоге, я замечаю, что Linux вызывает readlink метод 6 раз подряд для каждой записи в каталоге.

Это ошибка на моей стороне или нормальное поведение?

Ответы [ 2 ]

2 голосов
/ 08 августа 2010

Ну, это определенно не вызывает 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 голос
/ 26 октября 2011

Правильно ли вы установили st_size в getattr? Сначала ls попытается с размером буфера возвращенного st_size и удвоит его, пока буфер чтения не уместится.

...