OSX用户空间设备文件

时间:2013-03-14 05:07:37

标签: macos iokit block-device

有没有办法通过OSX(10.8+)中的用户空间创建块设备,没有第三方库(FUSE等)?

我正在尝试创建一个用户空间工具。想法是用户向工具提供文件,该工具创建虚拟界面。无论何时写入接口,该工具都会对数据执行操作,然后写入原始文件。无论何时读取接口,该工具都会从原始文件中读取并应用逆操作。

我不一定需要块设备。该工具需要创建某种可被视为文件的虚拟接口,即可以由其他应用程序打开并保存。

我查看了I / O Kit的用户空间例程,但似乎没有任何意义,因为创建虚拟USB / FireWire / MMC / SCSI设备似乎过多。

1 个答案:

答案 0 :(得分:2)

我没有进入内核空间就能想到的最接近的东西是fifo或命名管道 - 这本质上是一个带有文件名的管道。不幸的是,作为一个管道,你不能寻求等等 - 你可以在一个过程中打开fifo进行阅读,在另一个进程中进行写入。您可以使用mkfifo命令行实用程序或mkfifo() C函数来创建它们。

还有UNIX域套接字,类似于IP套接字,但同样由文件名标识,而不是网络结构。这些可以从两端读取和写入,但同样没有寻求。

至于实际实现vnode的ops函数(OSX中文件的内核表示),我相信你必须放弃内核。请注意,创建块设备并不是严格必需的I / O工具包 - 如果BSD设备节点足够,并且您不需要硬件支持或弹出卷等,您只需创建一个{{1提供ops向量作为参数。 (对于基于I / O Kit的存储设备,bdevsw_add()会自动执行此操作,同时使用IOMediaBSDClient创建字符设备。另一个更精细的选项是实现您自己的文件系统。