当前位置: 首页 > 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协议发送数据到上位机并显示。当数据量小的时候上位机显示正常,一旦数据量大过大上位机就会出现数据丢失的情况,甚至数据直接…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。​ 一、准…...

P10909 [蓝桥杯 2024 国 B] 立定跳远

# P10909 [蓝桥杯 2024 国 B] 立定跳远 ## 题目描述 在运动会上,小明从数轴的原点开始向正方向立定跳远。项目设置了 $n$ 个检查点 $a_1, a_2, \cdots , a_n$ 且 $a_i \ge a_{i−1} > 0$。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时&#xff0…...