我基于示例项目LoopbackFS开发了一个简单的MacFuse文件系统,然后我将fuse文件系统挂载到文件夹lookB,该文件夹位于路径/Users/eren/lookB下。
现在我们有两种方式访问lookB文件夹,一种是通过Finder直接访问路径/Users/eren/lookB,另一种方式是访问fuse挂载路径,如/volumes/loop/FuseDemo。
我尝试了这两种方法来访问文件夹lookB下的内容,但发现当我直接使用路径/Users/eren/lookB时,MacFuse文件系统回调从未被调用。我认为这是因为 Finder 没有使用我的 FuseDemo 文件系统。
有没有办法拒绝 Finder 通过 /Users/eren/lookB 等路径访问我的 MacFuse 文件系统?或者有什么方法可以隐藏路径 /Users/eren/lookB 中的文件夹吗?
我想要的是用户只能通过挂载点路径/volumes/loop/FuseDemo访问我的fuse文件系统,我尝试了很多方法,例如通过从
contentsOfDirectoryAtPath
回调返回空来隐藏FuseDemo文件夹,创建一个虚拟通过从 contentsOfDirectoryAtPath
回调返回虚拟文件夹名称来访问 Fuse 文件系统下的文件夹,但它们都没有帮助。
经过几天的研究,终于找到了一种方法来拒绝Finder从真实路径打开文件夹。只需使用 Endpoint 系统扩展,并在
ES_EVENT_TYPE_AUTH_READDIR
是我的文件夹路径时拒绝所有 msg->event.readdir.target->path.data
。
虽然这使得我无法在我的文件系统下看到这些文件,但我仍然可以使用文件系统 API 如 open()
、createFile()
在文件夹中进行一些操作。