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接…...
大数据治理的关键技术:构建稳固的数据基石
在这个信息爆炸的时代,数据已经成为企业最宝贵的资产之一。然而,随着数据量的爆炸性增长,如何有效治理这些数据成为了一个巨大的挑战。今天,我们就来聊聊大数据治理的关键技术,看看如何构建一个稳固的数据基石…...
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协议发送数据到上位机并显示。当数据量小的时候上位机显示正常,一旦数据量大过大上位机就会出现数据丢失的情况,甚至数据直接…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
