【文件I/O】 总表和分表

embedded/2025/1/11 10:33:16/

在 Linux 系统中,文件操作中涉及的 总表分表文件描述符管理机制中 的两个重要概念。它们分别对应于 系统级别的文件表进程级别的文件表

总表(系统文件表)

总表系统级别 的文件表,记录系统中所有打开文件的信息。
每个打开的文件在总表中有一个唯一的条目,与文件对应的内核数据结构(如文件 inode 和文件偏移量)相关联。

存储文件相关的全局信息,包括:

  • 文件指针(偏移量)。
  • 文件状态(读、写、追加等)。
  • 文件的 inode 信息(指向文件元数据)。

确保多个进程共享同一个文件时,能够维护文件的状态一致性。

总表是由操作系统维护的一个全局数据结构,每个打开的文件都会在总表中注册一个条目。总表中的条目通过文件的 文件描述符表(分表) 被进程引用。
在这里插入图片描述
总表与分表

分表(进程文件表)

分表进程级别 的文件表,每个进程维护一个自己的分表。
分表中的每一项保存了该进程打开文件的文件描述符及其对应的引用。

存储进程对文件的访问信息,包括:

  • 文件描述符(整数形式,如 0、1、2)。
  • 指向总表中条目的引用。
  • 文件在当前进程中的访问权限(只读、只写、读写等)。

每个进程的分表是独立的,但可以通过文件描述符的共享机制(如 fork())共享文件条目。

分表是一个数组,数组的每一项存储一个文件描述符及其对应的总表条目的引用。当进程打开文件时,会在分表中新增一个条目,并分配一个文件描述符。

特点总表(系统文件表)分表(进程文件表)
级别系统级别,所有进程共享进程级别,每个进程独立维护
作用存储文件全局状态信息存储文件描述符及其对应的总表引用
内容文件指针、文件状态、文件 inode 信息文件描述符、文件权限及对总表的引用
共享机制多个进程可以共享同一个总表条目分表是独立的,但可以通过 fork() 等方式共享
操作对象文件(系统中所有打开的文件)文件描述符(进程打开的文件)
修改范围修改影响所有引用该文件的进程修改仅影响当前进程的文件描述符
二者的关系

关联机制:

  • 当进程打开文件时,操作系统首先在总表中为该文件分配一个条目。
  • 然后在当前进程的分表中建立一个条目,指向总表中的该文件条目。
  • 分表中的文件描述符用于引用总表中的信息。

文件偏移量共享:

  • 总表中的文件偏移量是共享的。
  • 如果多个进程通过文件描述符共享同一个总表条目(如通过 fork() 或 dup()),则它们对文件的读写操作会影响共享的文件偏移量。
通过代码说明总表和分表的作用:

示例:系统调用解析

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>int main() {// 打开文件int fd1 = open("example.txt", O_RDWR | O_CREAT, 0666);if (fd1 < 0) {perror("Error opening file");return 1;}// 复制文件描述符int fd2 = dup(fd1);// 写入文件write(fd1, "Hello", 5);// 调整文件偏移量lseek(fd2, 0, SEEK_SET);// 从文件重新读取char buffer[6] = {0};read(fd2, buffer, 5);// 打印读取内容printf("Read content: %s\n", buffer);// 关闭文件close(fd1);close(fd2);return 0;
}// 1. 文件描述符 fd1 和 fd2 的分表条目共享同一个总表条目:
//   dup(fd1) 创建了一个新的文件描述符 fd2,但它们指向同一个总表条目。
//   修改 fd1 或 fd2 的文件偏移量会影响对方。// 2. 写入文件后调整偏移量:
//   调用 write(fd1, "Hello", 5) 将文件偏移量移至文件末尾。
//   通过 lseek(fd2, 0, SEEK_SET) 将文件偏移量重置到文件开头。// 3. 文件偏移量共享:
//   fd1 和 fd2 指向同一个总表条目,因此共享文件偏移量。
//   读取文件时偏移量已经被 lseek() 修改,因此从文件开头读取内容。

输出:

Read content: Hello
总表和分表的共享机制

文件描述符共享的场景:

  1. fork() 子进程继承父进程的文件描述符
    • 父进程和子进程的分表条目均指向同一个总表条目。
    • 父子进程共享文件偏移量。
  2. dup() 创建文件描述符副本
    • 新的文件描述符与原文件描述符共享总表条目。
    • 文件偏移量、文件状态均共享。
  3. 多进程文件共享
    • 如果多个进程分别打开同一个文件,则每个进程有独立的分表条目,但它们可能指向同一个总表条目。

设计总表的意义:1. 维护全局文件状态,确保文件资源被正确管理。2. 支持文件偏移量共享,提高文件操作的效率。
分表的意义:1. 提供进程级别的文件管理,支持文件描述符的灵活操作。2. 允许文件描述符引用同一文件,但可以设置不同的访问权限。

属性总表(系统文件表)分表(进程文件表)
级别系统全局进程局部
作用存储文件全局状态信息存储进程对文件的访问信息
共享性多个进程共享每个进程独立,但文件描述符可共享条目
内容文件指针、文件状态、inode 信息文件描述符、权限、对总表的引用

总表和分表的分工协作,使得 Linux 文件系统能够高效地管理打开的文件,并支持多进程之间的文件共享。

以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!


http://www.ppmy.cn/embedded/152983.html

相关文章

HTML5实现好看的博客网站、通用大作业网页模板源码

HTML5实现好看的博客网站、通用大作业网页模板源码 前言一、设计来源1.1 主界面1.2 列表界面1.3 文章界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看的博客网站、通用大作业网页模板源码&#xff0c;博客网站源码&#xff0c;HTML模板源码&#xff0…

赛车微型配件订销管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 赛车微型配件行业通常具有产品多样性、需求不确定性、市场竞争激烈等特点。配件供应商需要根据市场需求及时调整产品结构和库存&#xff0c;同时要把握好供应链管理和销售渠道。传统的赛车微型配件订销管理往往依赖于人工经验和简单的数据分析&#xff0c;效率低下且容易…

Linux 系统安装 NCBI Blast + A Quick Guide

前言 NCBI BLAST&#xff08;Basic Local Alignment Search Tool&#xff09;是由美国国家生物技术信息中心&#xff08;NCBI&#xff09;开发的一个深受生物信息学研究者青睐的基因序列比对工具。作为生物序列信息比对的行业标准&#xff0c;BLAST可用于分析核酸&#xff08;…

MongoDB中的索引是提高查询效率的重要工具

MongoDB中的索引是提高查询效率的重要工具&#xff0c;能够极大地优化数据检索过程。以下是对MongoDB索引设置的详细解释&#xff1a; 一、索引类型 单字段索引 在单个字段上建立的索引。对于单字段索引和排序操作&#xff0c;索引键的排序顺序&#xff08;升序或降序&#xf…

协同过滤算法电影推荐系统|Java|SpringBoot|VUE|

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SpringBoot、Mybatis-Plus、VUE、jquery,html 5⃣️…

Audio音频输出通道

一、AudioTrack的使用 //设置音频属性 AudioAttributes audioAttributes new AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).setUsage(AudioAttributes.USAGE_MEDIA).build(); //设置音频格式 AudioFormat audioFormat new AudioFormat.Bu…

计算机毕业设计PyHive+Hadoop深圳共享单车预测系统 共享单车数据分析可视化大屏 共享单车爬虫 共享单车数据仓库 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

以电子技术为主要作战手段的一类军用飞机

电子战机&#xff0c;作为现代战争中不可或缺的空中力量&#xff0c;正日益成为各国军事战略的重要组成部分。它们不仅承担着电子侦察、电子干扰和电子攻击等多重任务&#xff0c;更在信息化战争中发挥着决定性的作用。本文将深入探讨电子战机的技术特点、发展历程、作战应用以…