当前位置: 首页 > 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操作。

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

相关文章:

linux file结构体与inode结构体

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

探索迷宫的奥秘:用 C++ 打造你的迷宫游戏之旅!

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

JSON 注入攻击 API

文章目录 JSON 注入攻击 API"注入所有东西"是"聪明的"发生了什么? 什么是 JSON 注入?为什么解析器是问题所在解析不一致 JSON 解析器互操作性中的安全问题处理重复密钥的方式不一致按键碰撞响应不一致JSON 序列化(反序列化)中的不一致 好的。JSON 解析器…...

MyBatis入门程序之客户添加、更新与删除

【图书介绍】《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》-CSDN博客 《SpringSpring MVCMyBatis从零开始学 视频教学版 第3版整合开发实战快速开发与项目实战框架技术精讲与整合案例 计算机与互联网 编程语言与程序…...

查缺补漏----数据结构树高总结

① 对于平衡二叉树而言,树高的规律: 高度为h的平衡二叉树的含有的最少结点数(所有非叶节点的平衡因子均为1): n01,n11,n22 含有的最多结点数: (高度为h的满二叉树含有的结点数) ②…...

jenkins添加新服务

jenkins添加新服务 新建item 添加流水线 node{def envname "ENVIRONMENT:1234-dev"def projectGitUrl http://xxxxx/xxxxxx/12345.gitdef imageServer harbor.xxxxx.com //镜像仓库地址def projectAppName 12345-applicationdef projectGitBranch dev//git分…...

网络连接设备的功能与应用概述

目录 一、集线器 二、交换机 三、网桥 四、路由器 五、集线器、交换机、网桥与路由器的比较 备注 一、集线器 定义: 集线器(Hub)是一种物理层设备,它提供多个端口,用于将多个计算机或其他网络设备连接在一起&am…...

【SpringCloud】04-Gateway网关登录校验

1. 网关请求处理流程 2. 网关过滤器 3. 网关实现登录校验 Component // 参数构造器 RequiredArgsConstructor public class AuthGlobalFilter implements GlobalFilter, Ordered {private final AuthProperties authProperties;private final JwtTool jwtTool;private final A…...

FFmpeg 库的简要说明

FFmpeg 库的简要说明: libavutil 功能:提供一系列通用工具函数,旨在简化开发流程。 主要用途: 随机数生成器:用于生成随机数,适用于各种应用。 数据结构:提供常用的数据结构(如链表…...

Go:error处理机制

文章目录 本篇总结的是Go中对于错误的处理机制 Go 语言的函数经常使用两个返回值来表示执行是否成功:返回某个值以及 true 表示成功;返回零值(或 nil)和 false 表示失败 而实际上来说,是需要对于第二个参数进行判断的…...

Python机器学习中的主成分分析(PCA)全面解析与应用

🎯 Python机器学习中的主成分分析(PCA)全面解析与应用 📖 目录 🌟 主成分分析 (PCA) 的概念和原理🔎 PCA的数学基础🛠 Python 实现 PCA 的步骤详解📊 如何选择适合的主成分数量⚙️…...

MySQL 安装和基本使用

MySQL 介绍 MySQL 的特性 MySQL 是基于开源协议发布的,可以免费使用,也可以基于源码进行二次开发。 MySQL 使用标准 SQL 语言进行管理。 MySQL 可以运行于多个系统上,具有跨平台特性,并且支持多种语言。 MySQL 使用插件式存储…...

RequestBody接收参数报错com.fasterxml.jackson.databind.exc.MismatchedInputException

目录: 1、错误现象2、解决办法3、最终验证 1、错误现象 报错的现象和代码如下: 2、解决办法 查了很多都说参数类型对不上,最后只有换接收方式后验证是可以的;最终想了一下,觉得是请求的是json,需要用json接…...

大数据治理的关键技术:构建稳固的数据基石

在这个信息爆炸的时代,数据已经成为企业最宝贵的资产之一。然而,随着数据量的爆炸性增长,如何有效治理这些数据成为了一个巨大的挑战。今天,我们就来聊聊大数据治理的关键技术,看看如何构建一个稳固的数据基石&#xf…...

OS管理和进程的学习

1.冯诺依曼体系结构 1.1 输入设备:键盘,鼠标,键盘,网卡(网络接受),磁盘... 输出设备:显示器,磁盘,网卡(网络发送) .... 存储器&…...

Linux 部署 Harbor 镜像仓库详解

文章目录 安装 Docker安装 Harbor访问 Harbor 安装 Docker 本次部署流程使用的是1台阿里云ECS,Ubuntu 22.04,2核4G。 首先需要做的是在当前服务器上,安装好 Docker,参考链接如下: https://blog.csdn.net/weixin_4659…...

怎么把flv格式转换成mp4?将flv格式换成MP4格式的简单方法

怎么把flv格式转换成mp4?flv这一昔日网络视频领域的璀璨明星,凭借其小巧的文件体积与卓越的流媒体传输性能,曾在网络视频时代初期大放异彩,成为无数网络视频爱好者的首选。然而,随着科技的日新月异与多媒体设备的多元化…...

原型模式和建造模式的区别

原型模式(Prototype Pattern)和建造者模式(Builder Pattern)虽然都是创建型设计模式,但它们的应用场景和实现方式有着显著的区别。以下是二者的详细对比: 1. 意图和应用场景 原型模式: 意图&a…...

最新 client-java 调用 k8s ApiServer

创建权限绑定 sa-role.yaml apiVersion: v1 kind: ServiceAccount metadata:name: my-admin #账号名namespace: kube-system--- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata:annotations:rbac.authorization.kubernetes.io/autoupdate: "true…...

TCP单包数据大于1460字节会被拆包的问题

关于TCP单包数据大于1460字节会被拆包的问题 1、问题背景: 最近在用STM32W5500做项目,需要STM32通过TCP协议发送数据到上位机并显示。当数据量小的时候上位机显示正常,一旦数据量大过大上位机就会出现数据丢失的情况,甚至数据直接…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...