大佬教程收集整理的这篇文章主要介绍了Linux如何知道调用哪个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
在那里你会看到ioctl的系统调用:
SYSCall_DEFINE3(ioctl,unsigned int,fd,cmd,unsigned long,arg)
这反过来调用do_vfs_ioctl(),它调用vfs_ioctl(),然后调用file_operations结构中为该文件系统定义的unlocked_ioctl函数.这将是您注册的device_ioctl函数.
以上是大佬教程为你收集整理的Linux如何知道调用哪个ioctl函数?全部内容,希望文章能够帮你解决Linux如何知道调用哪个ioctl函数?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。