我想设计一种方法来覆盖单个文件上的读取,写入和映射(页面调入)方法,而无需实现整个新文件系统的负担。
因此,我研究了使用块设备的选项。例如,我的设备将代表一个动态库,可供其他进程加载。
到目前为止,我能够使用以下代码创建设备(以macOS内核扩展编写,但应与每个基于BSD的操作系统兼容)。
static struct cdevsw my_device =
{
// Implement the methods
.d_open = my_open,
.d_close = my_close,
.d_read = my_read,
...
};
int my_major_index = cdevsw_add (-1 /* auto select index */, &my_device);
dev = makedev (my_major_index, 0);
void * device_node = devfs_make_node (dev,
DEVFS_BLOCK,
UID_ROOT,
GID_WHEEL,
MY_PERMISSION,
"my_device");
在此实例化之后,我在/dev/my_device
,
我的问题是我是否可以使用dlopen
(意为dlopen("/dev/my_device")
或者我应该先将此设备挂载到HFS +文件系统,并将我的dylib复制到此挂载点来调用此设备?