当前位置: 首页 > news >正文

linux file结构体与inode结构体

在 Linux 系统中,inode 结构体和 file 结构体都是与文件系统相关的重要数据结构。它们各自承担着不同的角色,帮助操作系统管理文件和目录。以下是它们的异同点:
inode 结构体

1.定义:inode(索引节点)是文件系统中用于存储文件元数据的结构体。
2.功能:
3.存储文件的属性,如权限、拥有者、时间戳(创建、修改、访问时间)、文件大小、链接计数等。
4.记录文件的数据块在磁盘上的位置。
5.每个文件在文件系统中都有一个唯一的 inode 号码。
6.内容:
7.文件类型(普通文件、目录、设备文件等)
8.权限信息(用户权限、组权限、其他用户权限)
9.文件大小
10.链接计数(指向该 inode 的硬链接数量)
11.数据块指针(指向存储文件内容的物理位置)
12.例子:在 ext4 文件系统中,inode 结构体定义通常类似于:

struct inode {
umode_t i_mode; // 文件类型和权限
unsigned long i_ino; // inode 号
unsigned long i_nlink; // 链接计数
uid_t i_uid; // 文件拥有者
gid_t i_gid; // 文件所属组
loff_t i_size; // 文件大小
struct timespec i_atime; // 最后访问时间
struct timespec i_mtime; // 最后修改时间
struct timespec i_ctime; // 状态改变时间
// 其他成员…
};

file 结构体

13.定义:file 结构体是用于表示打开的文件的对象。
14.功能:
15.存储文件的打开状态和相关信息。
16.包含与文件 I/O 操作相关的上下文信息,例如文件偏移量、打开模式、文件描述符等。
17.file 结构体的实例与具体的进程相关联,表示该进程对文件的访问。
18.内容:
19.文件描述符(用于进程访问文件)
20.当前文件偏移量(指示读取或写入的位置)
21.打开的文件模式(只读、只写、读写)
22.指向相应的 inode 结构体的指针
23.其他与文件状态相关的信息
24.例子:file 结构体定义通常类似于:

struct file {
struct list_head f_list; // 用于链表管理
struct dentry *f_dentry; // 指向对应的目录项
struct vfsmount *f_vfsmnt; // 指向对应的挂载点
unsigned int f_flags; // 文件打开模式
loff_t f_pos; // 当前文件偏移量
struct file_operations *f_op; // 文件操作方法
// 其他成员…
};

异同点总结

特征inode 结构体file 结构体
目的描述文件的元数据和结构描述打开的文件及其状态
内容文件权限、大小、时间戳等元数据文件偏移量、打开模式、文件描述符
生命周期与文件存在相同,长久于文件之上由进程控制,打开文件时创建,关闭文件时销毁
关联性每个文件有一个唯一的 inode每个打开的文件由一个 file 结构表示,与进程关联
总之,inode 结构体主要用于存储文件的静态元数据,而 file 结构体则用于表示文件的动态状态(如打开状态、偏移量等)。

在 Linux 系统中,文件描述符(file descriptor, fd)和 struct file 之间存在着密切的关系。理解它们之间的关系对于掌握 Linux 文件 I/O 操作的工作原理非常重要。以下是对它们之间关系的详细说明:
文件描述符(fd)

1.定义:文件描述符是一个非负整数,用于标识一个进程打开的文件。每个进程有一个文件描述符表,其中存储了所有打开文件的描述符。
2.功能:
3.文件描述符用于进程与内核之间的通信。当进程想要进行文件操作(如读、写、关闭文件等)时,它通过文件描述符告诉内核要操作哪个文件。
4.文件描述符的值通常从 0 开始,0、1、2 分别对应标准输入、标准输出和标准错误输出。后续的描述符用于表示进程打开的其他文件。

struct file

5.定义:struct file 是内核中用于表示一个打开文件的结构体。每个打开的文件都有一个对应的 struct file 实例。
6.功能:
7.存储关于打开文件的信息,例如当前偏移量、打开模式、指向 inode 结构体的指针、相关的文件操作等。
8.管理与文件 I/O 操作相关的状态和上下文信息。

fd 与 struct file 的关系

9.文件描述符与文件结构的映射:

10.每个文件描述符对应一个 struct file 结构体。当进程打开一个文件时,内核会分配一个新的文件描述符,并创建一个相应的 struct file 实例。这个文件描述符实际上是用来索引文件描述符表中的条目,而这个条目指向一个 struct file。

11.文件描述符表:

12.在每个进程的内核数据结构中,有一个文件描述符表(file descriptor table),每个条目是一个指向 struct file 的指针。通过文件描述符,可以访问到该指针,从而获取与该文件相关的所有信息。
13.例如,如果进程用文件描述符 3 来打开一个文件,进程的文件描述符表中的第 3 个条目会指向对应的 struct file 实例。

14.使用示例:

15.当一个进程调用 open() 函数打开一个文件时,内核执行以下操作:
16.分配一个空闲的文件描述符。
17.创建或获取相应的 struct file 实例。
18.将该 struct file 的指针存储在进程的文件描述符表中。
19.返回分配的文件描述符。

20.关闭文件:

21.当进程调用 close(fd) 时,内核会根据文件描述符查找对应的 struct file 实例,释放与之关联的资源,并将文件描述符表中相应的条目清空。

总结

22.文件描述符(fd)是用户空间中用于访问打开文件的整数标识符,而 struct file 是内核空间中用于管理和描述打开文件的结构体。
23.通过文件描述符,用户空间进程可以访问和操作 struct file,实现文件的读取、写入和关闭等操作。
24.每个打开的文件都有唯一的文件描述符,并且在内核中有对应的 struct file 实例,内核通过这个结构体来管理文件的状态和I/O操作。

这个关系让操作系统能够有效地管理和调度进程与文件之间的交互。

http://www.lryc.cn/news/465689.html

相关文章:

  • 探索迷宫的奥秘:用 C++ 打造你的迷宫游戏之旅!
  • JSON 注入攻击 API
  • MyBatis入门程序之客户添加、更新与删除
  • 查缺补漏----数据结构树高总结
  • jenkins添加新服务
  • 网络连接设备的功能与应用概述
  • 【SpringCloud】04-Gateway网关登录校验
  • FFmpeg 库的简要说明
  • Go:error处理机制
  • Python机器学习中的主成分分析(PCA)全面解析与应用
  • MySQL 安装和基本使用
  • RequestBody接收参数报错com.fasterxml.jackson.databind.exc.MismatchedInputException
  • 大数据治理的关键技术:构建稳固的数据基石
  • OS管理和进程的学习
  • Linux 部署 Harbor 镜像仓库详解
  • 怎么把flv格式转换成mp4?将flv格式换成MP4格式的简单方法
  • 原型模式和建造模式的区别
  • 最新 client-java 调用 k8s ApiServer
  • TCP单包数据大于1460字节会被拆包的问题
  • 苏宁关键字搜索接口技术解析与实战
  • Java学习教程,从入门到精通,Java 基本数据类型详解(5)
  • 使用Flask实现本机的模型部署
  • 基于SSM的校园跑腿网站的设计与实现
  • 【Java】正则表达式详解
  • Java知识巩固(七)
  • Ubuntu22.04 更换源
  • 江恩理论和波浪理论的结合
  • AJAX——AJAX 取消请求
  • ruoyi域名跳转缓存冲突问题(解决办法修改:session名修改session的JSESSIONID名称)
  • 嵌入式QT中基本工程模板分析