macos - 如何在 macos 上实现虚拟文件系统?
问题描述
我已经看到一些应用程序能够在 MacOS 上的 Finder 中将自己表示为外部磁盘。通常,这些是云存储应用程序,例如PCloud Drive和WD Discovery。我想知道他们是如何做到这一点的。
我意识到云存储可能只是实现了一些远程文件系统协议,例如 Samba 或 AFP。但我仍然不太明白应用程序如何将文件系统直接挂载到 Finder 中。此外,如果虚拟文件系统不依赖于网络存储,是否有更有效的方法来挂载它?
解决方案
这是一个相当高级的问题,所以我将给出一个高级的答案。我不知道您列出的具体示例如何实现它,但这应该不难找到。
据我所知,选项如下:
- 从根本上讲,您可以创建一个 VFS kext。这就是首先在 macOS 中实现对 HFS+、APFS、FAT、SMB、AFP 等的支持的方式。Kernel.framework 中的头文件主要是
<sys/vnode.h>
、<sys/vnode_if.h>
和<vfs/vfs_support.h>
。这为您提供了最大的权力,但也很困难,并且安装 kexts 的用户体验不断恶化。(除非用户做一些相当复杂的杂技,否则它们根本不会在 ARM64 Mac 上加载。) - MacFUSE 可以为您完成一些繁重的工作。一些许可问题,它又通过 kext 实现,因此 UX 问题也适用于此。
- 使用
NSFileProvider
. 这适用于云风格的虚拟文件系统,但在某种程度上可以用于不同但相关的场景。 - 实现一个网络文件系统服务器,然后使用 API 挂载。
- 通过另一种方法(例如通过 DriverKit SCSI 控制器驱动程序或通过 iSCSI 目标)实现托管常规文件系统的块设备。仅当数据源可合理地表示为块设备时,这才真正有意义。
推荐阅读
- javascript - 配置用户名和密码以允许用户访问我的 Parse Server 后,如何运行任何 JS 函数?
- flutter - Firebase_db_web_unofficial 依赖
- java - (TXT 文件)Java GUI 登录
- c++ - Google Test 测试名称混淆
- ffmpeg - ffmpeg concat 视频导致时间戳混乱
- awk - awk 根据模式转置行并在之后移动(复制)剩余的列
- unity3d - Unity中“鼠标X”和“水平”的区别
- qt - 创建新插槽时未解析的外部符号
- javascript - 异步等待节点中的特定事件
- python - 从 python 写入 Excel 电子表格