【发布时间】:2016-11-12 06:37:37
【问题描述】:
我正在使用 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() 是我自己在struct fuse_operations 中实现的getattr() 回调。
函数get_entry_attr()用于获取文件的属性,由于在该路径找不到对应的文件而报错。
FUSE 似乎会自动尝试在某些特殊的隐藏文件/目录上调用 getattr(),而且这只发生在 Mac OS X 上。日志输出在 Linux 上是正常的。
问题
* 那些特殊文件是什么?
* 为什么 FUSE 首先在这些路径上调用getattr()?
* 如何在 Mac OS X 上防止这种情况发生?
【问题讨论】:
-
为什么你认为是 FUSE 做的,而不是操作系统在挂载卷时做的?为什么要阻止它?你为什么在乎?就像任何其他尝试访问不存在的文件一样失败。当然,您的文件系统实现必须处理这个问题。