linux系统中三个重要的结构体

news2024/11/18 23:45:17

第一​:struct inode结构体

struct inode {  ······  struct hlist_node  i_hash;  struct list_head  i_list;    /* backing dev IO list */  struct list_head  i_sb_list;  //主次设备号  dev_t      i_rdev;  struct list_head  i_devices;  //用联合体是因为该文件可能是块设备文件或者字符设备文件  union {    struct pipe_inode_info  *i_pipe;  //管道文件    struct block_device  *i_bdev;  //块设备文件    struct cdev    *i_cdev;  //字符设备文件  };    //私有数据  void      *i_private; /* fs or device private pointer */};

功能:struct inode结构体是用来表示一个静态文件的,每个文件都会对应唯一的struct inode结构体,结构体里描述了文件的详细信息。

​第二:struct file结构体

struct file {  union {    struct list_head  fu_list;    struct rcu_head   fu_rcuhead;  } f_u;  ······    const struct file_operations  *f_op;  //该文件对应的操作方法    unsigned int     f_flags;    fmode_t      f_mode;  //打开文件的权限,比如:只读打开、只写打开、读写打开  loff_t      f_pos;  //文件指针的偏移量    /* needed for tty driver, and maybe others */  void      *private_data;  //私有数据};

功能:struct file结构体 用来表示一个动态的设备,每当open打开一个文件时就会产生一个struct file结构体 与之对应。

​第三:struct file_operations结构体

struct file_operations {  struct module *owner;  ······  loff_t (*llseek) (struct file *, loff_t, int);  ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);  ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);  int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);  long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);  int (*open) (struct inode *, struct file *);  int (*release) (struct inode *, struct file *);};

​功能:struct file_operations结构体是用来描述设备的操作方法的。在linux中一切皆是文件,不管是普通文件还是设备驱动文件上层应用都是用同一的open、read函数去操作。每一个struct file结构体 中都保存了一个struct file_operations结构体,虽然上层应用都是调用的read函数,但是在内部实际通过函数指针调用了不同的read函数。

​第四:struct cdev结构体

struct cdev {  struct kobject kobj;  struct module *owner;  const struct file_operations *ops; //设备的操作方法  struct list_head list;  dev_t dev;  //主次设备号  unsigned int count;  //引用计数};

第五:结构体之间的关联

1、struct inode结构体和struct file结构体

(1)struct inode结构体和struct file结构体 都是用来描述文件信息的,struct inode结构体是描述静态的文件,struct file结构体描述动态的文件(也就是打开的文件);

(2)每个文件只有唯一的struct inode结构体,但是可以有多个struct file结构体,文件每被打开一次就多一个 struct file结构体 ;

2、struct file_operations结构体和struct cdev结构体

(1)struct file_operations结构体描述设备的操作方法,struct cdev结构体描述字符设备全部的信息;

(2)struct cdev结构体包含struct file_operations结构体,在注册驱动时需要将struct file_operations结构体指针赋值给struct cdev结构体;

3、struct inode结构体和struct cdev结构体

(1)上层应用访问设备驱动是通过设备节点,设备节点就是一个文件,在创建设备节点时需要指明主次设备号,主次设备号就会保存在设备节点对应的 struct inode结构体的i_rdev变量中;

(2)在向内核注册字符设备驱动时就是将对应的struct cdev结构体注册到chrdevs全局变量中,其中struct cdev结构体就保存了主次设备号;

(3)struct inode结构体的联合体中有struct cdev结构体指针,将来找到对应的struct cdev结构体会对该指针赋值;

(4)联系:在用open打开设备节点时从struct inode结构体中获取初次设备号,然后用这个主次设备号去chrdevs全局变量中找到对应的struct cdev结构体。

总结:依靠主次设备号联系起来。​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1064981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

山西省行政村边界数据/乡镇街道边界数据/行政区划边界分布

山西(简称:晋,别称:三晋,古称河东),中华人民共和国省级行政区,省会太原市,位于黄河中游东岸,华北平原西面的黄土高原上。东以太行山为界,与河北为…

019 基于Spring Boot的教务管理系统、学生管理系统、课表查询系统

基于Spring Boot的教务管理系统、学生管理系统、课表查询系统 一、系统介绍 本作品主要实现了一个课表查询系统,采用了SSM(Spring SpringMVC MyBatis)的基础架构。 二、使用技术 spring-bootspring-MVCthymeleafmybatis-plusdruidLombo…

Ae 效果:CC Lens

扭曲/CC Lens Distort/CC Lens CC Lens (CC 镜头)主要用于添加或移除摄像机镜头扭曲,比如桶形失真 Barrel、枕形失真 Pincushion以及鱼眼失真 Fisheye等。或者,用它来创建一些特殊的动画效果。 ◆ ◆ ◆ 效果属性说明 Center 中…

数据结构 2.1 单链表

1.单链表 线性表:1.有限的序列 2.序列中的每一个元素都有唯一的前驱和后继,除了开头和结尾的两个节点。 顺序表:分配一块连续的内存去存放这些元素,eg、数组 链表:内存是不连续的,元素会各自被分配一块内…

防抖和节流的实现

防抖和节流的实现 什么是防抖和节流实现防抖和节流防抖节流 防抖和节流的应用场景 什么是防抖和节流 防抖和节流是前端开发中常用的两种性能优化技术。 为什么需要防抖和节流呢? 两者目的都是为了防止某个时间段内操作频繁触发,造成性能消耗。 防抖&…

gin路由相关方法

c.Request.URL.Path 拿到请求的路径 package mainimport ( "fmt" "github.com/gin-gonic/gin" "net/http")//路由重定向,请求转发,ANY ,NoRoute,路由组func main() { r : gin.Default() // -------…

Python 无废话-办公自动化Excel格式美化

设置字体 在使用openpyxl 处理excel 设置格式,需要导入Font类,设置Font初始化参数,常见参数如下: 关键字参数 数据类型 描述 name 字符串 字体名称,如Calibri或Times New Roman size 整型 大小点数 bold …

Spring注册Bean系列--方法5:@Import+ImportBeanDefinitionRegistrar

原文网址:Spring注册Bean系列--方法5:ImportImportBeanDefinitionRegistrar_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法:ImportImportBeanDefinitionRegistrar。 注册Bean的方法我写了一个系列,见&#xff…

NAT模式和桥接模式的区别

NAT模式和桥接模式的区别 NAT模式和桥接模式都是虚拟机网络配置的两种方式,主要区别在于虚拟机与外部网络交互的方式不同。 NAT(Network Address Translation,网络地址转换)模式:在这种模式下,虚拟机和宿主…

SystemUI状态栏

SystemUI状态栏 1、日志开关2、相关属性配置3、Statusbar界面启动 android13-release 1、日志开关 Log.isLoggable通过设置属性,重启应用;Compile.IS_DEBUG日志开关是src-debug和src-release版本区别 frameworks\base\packages\SystemUI\src\com\android…

C++设计模式-外观(Facade)

目录 C设计模式-外观(Facade) 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-外观(Facade) 一、意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接…

阿里云服务器Anolis OS龙蜥操作系统详细介绍

阿里云服务器Anolis OS镜像系统由龙蜥OpenAnolis社区推出,Anolis OS是CentOS 8 100%兼容替代版本,Anolis OS是完全开源、中立、开放的Linux发行版,具备企业级的稳定性、高性能、安全性和可靠性。目前阿里云服务器ECS可选的Anolis OS镜像系统版…

机器视觉行业最可怕的不是以量换价吗?而是买方市场的带量采购,量价挂钩

机器视觉行业其实有很多值得思考,人力成本(团队人数控制),硬件成本,售后成本,回款成本(收款成本)。那么我们今天谈谈带量采购,量价挂钩、以量换价。这个话题有很多争议,很多有趣的争论,也有值得我们后人评价。 什么是“以价换量”? 从经济学角度来看,“以价换量…

linux入门---信号的操作

目录标题 sigset_tsigset_t的操作函数sigprocmasksigpending信号的屏蔽测试sigaction sigset_t 为了能够让操作系统更好的使用信号,操作系统提供了sigset_t的数据类型,操作系统中存在pending表和block表,但是这两张表是内核数据结构&#xf…

数据结构-顺序存储二叉树

文章目录 目录 文章目录 前言 一 . 什么是顺序存储二叉树 二 . 模拟实现 前序遍历 总结 前言 大家好,今天给大家讲一下顺序存储二叉树 一 . 什么是顺序存储二叉树 顺序存储二叉树是一种将二叉树的节点按照从上到下、从左到右的顺序存储在数组中的方法。具体来说,顺…

Jackson 的 SNAKE_CASE 反序列化

最近项目中有关 JSON 的序列化和反序列化中,我们遇到了一个问题就是 category_id 我们在定义对象的时候使用的是 categoryId。 当程序进行反序列化的时候,我们获得的对象值为 NULL。 这是因为 jackson 提供了一个命名规则,如果你是希望进行…

FISCO BCOS(三十七)———FISCOBCOS应用开发,交易hash、区块高度的获取

这个需求怎么做? 交易hash的获取方式有很多,这里先介绍一种方式。 根据块高查询区块信息 https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Front/interface.html那我们如何知道现在的区块高度是多少? https://webasedoc.readthedocs.io/zh_CN/latest/docs/W…

谦卑篇(Be humble)//伟大是用卑微来换取的,任何时候都应该看清自己

1. 宇宙诞生138亿年,地球迄今经过了46亿个春秋,人生不过百年,//从生命科学的角度。 2. 蔡崇信:好的领导者是很谦卑的,他们会用谦卑雇佣来能力更强的人。// 从创业者的角度。 3. 《臣服实验》: 臣服生命之流…

新版Ai企业级系统去授权版本完美运行

Ai企联系统去授权版新鲜出炉 一款市面上新出的AI企联系统,一款市面上新出的AI企联系统 项目uniapp开发的,支持3.5 4.0 Mj 此套系统5端适配,WebH5微信小程序抖音小程序双端APP,支持流量主! 好像有能力的快手小程序那些也可以上…

高通camx开源部分学习简介

camera整体框架 sensor 上电,通过 MIPI协议传输,得到RAW图像数据。RAW图像数据经过ISP处理,得到YUV图像数据。YUV图像数据再经过DMA传输到DDR内存中,DDR内存也就是上图中标识的HOST。每个厂家的 ISP原理和功能大致相同&#xff0c…