gpt4 book ai didi

c - Linux 如何知道要调用哪个 ioctl 函数?

转载 作者:IT王子 更新时间:2023-10-29 00:26:13 25 4
gpt4 key购买 nike

这是用户空间中的 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 函数的定义与用户空间接口(interface)不同:

static long device_ioctl(struct file *f, unsigned int cmd, unsigned long arg)

我认为基于文件描述符,内核可以获得合适的文件结构并调用设备的ioctl

这只是一个猜测,因为我找不到通用函数定义,内核根据传递给通用 的文件描述符 fd 选择适当的 ioctl 函数>ioctl 接口(interface)?我只能找到 3 个 ioctl 定义,但显然这些只是设备的定义,而不是内核:ioctl

最佳答案

查看 Linux 源代码,fs/ioctl.c ( http://lxr.free-electrons.com/source/fs/ioctl.c )
在那里你会看到 ioctl 的系统调用:

SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)

这依次调用 do_vfs_ioctl(),后者调用 vfs_ioctl(),然后 vfs_ioctl() 调用 file_operations 结构中为该文件系统定义的 unlocked_ioctl 函数。
这将是您注册的 device_ioctl 函数。

关于c - Linux 如何知道要调用哪个 ioctl 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23788509/

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