我正在用 FUSE(Mac OS X 上的 OSXFUSE 和 Linux 上的 libfuse)编写自己的玩具文件系统。每次我挂载文件系统时,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 上防止这种情况发生?