FUSE вызывает getattr для специальных путей на Mac
Я пишу свою собственную игрушечную файловую систему с помощью FUSE (OSXFUSE в Mac OS X и libfuse в Linux). Каждый раз, когда я монтирую файловую систему, FUSE вызывает getattr
по некоторым специальным путям, как показывает журнал:
[debug] trfs_getattr: called on path=/
[debug] trfs_getattr: called on path=/._.
[error] get_entry_attr: no entry at path /._.
[debug] trfs_getattr: called on path=/.hidden
[error] get_entry_attr: no entry at path /.hidden
[debug] trfs_getattr: called on path=/._.
[error] get_entry_attr: no entry at path /._.
[debug] trfs_getattr: called on path=/._.
[error] get_entry_attr: no entry at path /._.
[debug] trfs_getattr: called on path=/._.
[error] get_entry_attr: no entry at path /._.
[debug] trfs_getattr: called on path=/.hidden
[error] get_entry_attr: no entry at path /.hidden
функция trfs_getattr()
моя собственная реализация getattr()
обратный звонок в struct fuse_operations
,
функция get_entry_attr()
используется для получения атрибутов файла и сообщает об ошибке, поскольку не может найти соответствующий файл по этому пути.
Похоже, FUSE автоматически пытается позвонить getattr()
в некоторых специальных скрытых файлах / каталогах, и это происходит только в Mac OS X. Вывод журнала нормален в Linux.
Вопросы * Что это за специальные файлы?
* Почему звонит FUSE getattr()
на этих путях первым?
* Как предотвратить это в Mac OS X?
2 ответа
Те ._*
файлы не создаются fuse или вашей файловой системой напрямую, это функция Mac OS X, см.: https://apple.stackexchange.com/questions/14980/why-are-dot-underscore-files-created-and-how-can-i-avoid-them,
Это не Fuse, это сама FS. Он использует get_attr для проверки существования файлов по пути.