最近,我开发了一个简单的文件系统内核模块。
因此,我需要将自己的ioctl函数(.unlocked_ioctl
)分配给file_operation
结构,以实现对文件系统模块的特定命令。例如,Ext4文件系统有自己的ioctl函数。
然后,我使用dd
命令创建了一个文件并将其挂载:
# mount -t myfs -o loop simple_file /mnt/
一切正常,但如何使用ioctl和用户空间程序访问此文件系统?
我尝试ioctl(fd, MY_COMMAND_1, &my_struct_t);
(其中fd
是开发文件/dev/loop[0..7]
的文件描述符),但它返回Invalid argument
。
答案 0 :(得分:3)
如果您打开/dev/loop0
,则表示您正在访问循环设备,因此您正在与循环驱动程序进行通信。
您为文件系统注册的ioctl处理程序适用于在已安装文件系统上打开的文件。
fd = open("/mnt/something", O_RDWR);
ioctl(fd, MY_COMMAND_1, &my_struct_t);