简单剖析struct file、struct inode、struct file_operations

版权声明:本文为博主原创文章,欢迎分享!吾生有涯而知也无涯,一起加油 https://blog.csdn.net/qq_41822235/article/details/82431764
图 1架构示意图

一、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 longunsigned int       //表示缓冲区大小等非负值的长度使用
  • ssize_t:longint
  • 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函数指针。

猜你喜欢

转载自blog.csdn.net/qq_41822235/article/details/82431764