版权声明:本文为博主原创文章,欢迎分享!吾生有涯而知也无涯,一起加油 https://blog.csdn.net/qq_41822235/article/details/82431764
一、struct file_operations //用来连接设备编号和驱动程序操作 存放函数指针的结构体
事先需要掌握
/*在不同平台下,其具有不同的定义*/
/*64bits*/
typedef unsigned long __kernel_size_t;
typedef long __kernel_ssize_t;
/*32bits
typedef unsigned int __kernel_size_t;
typedef int __kernel_size_t;
*/
#ifndef __SIZE_T
#define __SIZE_T
typedef __kernel_size_t size_t; //unsigned long或unsigned int
#endif
#ifndef __SSIZE_T
#define __SSIZE_T
typedef __kernel_ssize_t ssize_t; //long或int
#endif
#ifdef __GNUC__
typedef long long __kernel_loff_t;
#endif
#if defined(__GNUC__)
typedef __kernel_loff_t loff_t; //long long
#endif
小结:出现的自定义类型所代表的数据类型:
- size_t:unsigned long或unsigned int //表示缓冲区大小等非负值的长度使用
- ssize_t:long或int
- loff_t:long long
struct file_operations //用来连接设备编号和驱动程序操作,本质是存放函数指针的结构体 { ssize_t(*read)(struct file *, char *, size_t, loff_t *); //从设备同步读取数据 ssize_t(*write)(struct file *, const char *, size_t, loff_t *); int(*ioctl)(struct inode *, struct file *, unsigned int, unsigned long);//执行设备I/O控制命令 int(*open)(struct inode *, struct file *); //打开文件 int(*release)(struct inode *, struct file *); //关闭文件 };
小结:从代码可以看出,结构体成员分别是read write ioctl open release函数指针。