0

0

【Linux】认识Linux内核中进程级别的文件结构体【files_struct】&文件IO模型初步演示

爱谁谁

爱谁谁

发布时间:2025-07-19 09:10:14

|

730人浏览过

|

来源于php中文网

原创

了解linux内核中进程级别的文件结构体【files_struct】以及文件io模型的初步演示,可以帮助我们更好地理解linux系统中的文件管理机制。以下是详细的介绍和演示:

【Linux】认识Linux内核中进程级别的文件结构体【files_struct】&文件IO模型初步演示

一.区分内核文件结构体file和files_struct与C标准库中文件结构体FILE

  • FILE结构体:这是C标准库中定义的一个结构体,用于表示一个打开的文件流,并封装了文件操作的相关信息。
  • file结构体:这是Linux内核中的结构体,代表一个打开的文件。
  • files_struct结构体:这是Linux内核中定义的一个结构体,用于表示进程级别的文件描述符表,并记录了该进程当前打开的所有文件的信息。如下图所示,进程结构体task_struct有一个文件指针指向files_struct结构体,files_struct结构体通过系统调用open后生成file结构体:

【Linux】认识Linux内核中进程级别的文件结构体【files_struct】&文件IO模型初步演示

二.文件描述符fd与进程文件描述符表fd_array

  1. files_struct结构体介绍

    files_struct结构体是Linux内核中定义的一个结构体,用于表示进程级别的文件描述符表。在Linux系统中,每个进程都有一个与之关联的文件描述符表,该表记录了该进程当前打开的所有文件的信息。以下是files_struct结构体的一些关键字段:

    • fd_array[]:这是一个指针数组,用于存储指向file结构体的指针。每个指针都指向一个打开的文件的file结构体,而文件描述符就是该指针数组的下标。
    • 文件引用计数:files_struct结构体还包含了一些用于管理文件描述符和文件引用的计数信息。例如,每个打开的file结构体都有一个引用计数,表示有多少个文件描述符指向它。当引用计数降为零时,表示没有文件描述符再指向该文件,此时可以关闭该文件并释放相关资源。

    【Linux】认识Linux内核中进程级别的文件结构体【files_struct】&文件IO模型初步演示

  2. 文件描述符fd与文件描述符表介绍

    fd_array是一个指针数组,用于存储指向file结构体的指针。每个指针都指向一个打开的文件的file结构体,而文件描述符fd就是该指针数组的下标。注意:进程运行的时候默认会打开标准输入、标准输出、标准错误,占用了fd0、1、2位,为了让程序员默认进行输入输出代码编写(0、1、2对应的物理设备一般是:键盘、显示器、显示器)。files_struct结构体中有一块区域用于存储这些信息。

    改图鸭AI图片生成
    改图鸭AI图片生成

    改图鸭AI图片生成

    下载

    【Linux】认识Linux内核中进程级别的文件结构体【files_struct】&文件IO模型初步演示

  3. 文件描述符的分配规则

    文件描述符的分配规则总结:寻找最小的,没有被使用的数据的位置,分配给指定的打开文件!

    【1】演示:(用到关闭文件描述符的系统调用:close)

    输出结果为fd:3

    #include 
    #include 
    #include 
    #include 
    
    int main() {
        int fd = open("myfile", O_RDONLY);
        if(fd == -1) {
            perror("open");
            return 1;
        }
        printf("fd: %d\n", fd);
        close(fd);
        return 0;
    }

    关闭0或者2结果:关闭0时输出fd:0,关闭2时输出fd:2

    #include 
    #include 
    #include 
    #include 
    #include 
    
    int main() {
        close(0); // 或者 close(2);
        int fd = open("myfile", O_RDONLY);
        if(fd == -1) {
            perror("open");
            return 1;
        }
        printf("fd: %d\n", fd);
        close(fd);
        return 0;
    }

通过以上内容,我们可以更好地理解Linux内核中文件管理的机制,特别是文件描述符和文件结构体的关系。

相关专题

更多
golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

196

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

189

2025.07.04

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

703

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

776

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

572

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

545

2023.07.20

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

36

2026.01.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 4.7万人学习

Node.js 教程
Node.js 教程

共57课时 | 8.9万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号