gpt4 book ai didi

macos - OSX 用户空间设备文件

转载 作者:行者123 更新时间:2023-12-01 07:47:32 25 4
gpt4 key购买 nike

有没有办法在 OSX (10.8+) 中通过用户空间创建 block 设备,而无需第 3 方库(FUSE 等)?

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

我不一定需要 block 设备。该工具需要创建某种可以被视为文件的虚拟界面,即它可以被另一个应用程序打开和保存。

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

最佳答案

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

还有 UNIX 域套接字,它们类似于 IP 套接字,但同样由文件名标识,而不是网络构造。这些可以从两端读取和写入,但同样不需要查找。

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

关于macos - OSX 用户空间设备文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15401606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com