【发布时间】:2014-07-10 09:50:04
【问题描述】:
这是用户空间中的ioctl 调用:
int ioctl(int fd, int cmd, ...);
据我所知,当我们想要执行 IO 操作时,我们使用一组请求(命令)定义自己的 ioctl 函数,将我们的 ioctl 分配给 file_operations 结构,如下所示:
struct file_operations fops = {
.read = device_read,
.write = device_write,
.ioctl = device_ioctl, // device_ioctl is our function
.open = device_open,
.release = device_release,
};
与用户空间界面相比,device_ioctl 函数的定义不同:
static long device_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
我认为基于文件描述符,内核可以得到合适的文件结构,调用设备的ioctl。
这只是一个猜测,因为我找不到内核根据传递给通用ioctl 接口的文件描述符fd 选择适当ioctl 函数的通用函数定义?我只能找到 3 个 ioctl 定义,但显然这些只是设备的定义,而不是内核:ioctl
【问题讨论】:
-
能否告诉我这些点 (.) 在这里的含义以及它作为函数指针的工作原理?我很想知道。
标签: c linux linux-kernel linux-device-driver ioctl