【问题标题】:FUSE calls getattr on special paths on MacFUSE 在 Mac 上的特殊路径上调用 getattr
【发布时间】: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 做的,而不是操作系统在挂载卷时做的?为什么要阻止它?你为什么在乎?就像任何其他尝试访问不存在的文件一样失败。当然,您的文件系统实现必须处理这个问题。

标签: macos fuse osxfuse


【解决方案1】:

这不是 Fuse,它是 FS 本身。 它使用 get_attr 来检查路径中存在的文件。

【讨论】:

    【解决方案2】:

    那些._* 文件不是由fuse 或您的文件系统直接创建的,它是Mac OS X 的功能,请参阅:https://apple.stackexchange.com/questions/14980/why-are-dot-underscore-files-created-and-how-can-i-avoid-them

    【讨论】:

      猜你喜欢
      • 2015-05-31
      • 2017-03-21
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 2016-10-10
      • 2011-12-08
      相关资源
      最近更新 更多