首页 > 其他分享 >第10章 无持久存储的文件系统 (2)

第10章 无持久存储的文件系统 (2)

时间:2024-08-19 14:52:30浏览次数:8  
标签:10.1 10 存储 struct read 文件系统 operations file proc

目录

10.1 proc文件系统

10.1.2 数据结构

10.1.3 初始化

10.1.4 装载 proc 文件系统

10.1.5 管理 /proc 数据项

10.1.6 读取和写入信息

10.1.7 进程相关信息

10.1.8 系统控制机制


本专栏文章将有70篇左右,欢迎+关注,查看后续文章。

 

10.1 proc文件系统

10.1.2 数据结构

1. proc数据项的表示

struct   proc_dir_entry   {                 // 表示proc中一个文件。

        unsigned int        low_ino;         // inode索引节。

        umode_t             mode;            // 文件类型,权限等。

        nlink_t                 nlink;

        kuid_t                  uid;               // 通常为0,即root。

        kgid_t                  gid;               // 通常为0,即root。

        loff_t                    size;

        struct inode_operations         *proc_iops;

        struct file_operations              *proc_fops;

        struct proc_dir_entry              *next, *parent, *subdir;       //   目录层级关系。

        atomic_t                                 count;                                 // 引用计数。

        u8                                           namelen;                            // 文件名长度。

        char                                         name[  ];

}

2. proc  inode

struct   proc_inode   {

        struct pid                          *pid;         // cat /proc/pid/*** 时,有意义。

        unsigned int                      fd;           // cat /proc/ <pid> fd/ 时,有意义。

        union proc_op                   op;

        struct proc_dir_entry         *pde;

        struct inode                       vfs_inode;

};

union   proc_op {

        int         (*proc_get_link) (struct  dentry  *,   struct  path  *);

        int         (*proc_read) (struct  task_struct   *task,    char  *page);

        int         (*proc_show) (struct  seq_file   *m,    struct  pid_namespace   *ns,    struct  pid   *pid,    struct task_struct   *task);

};

10.1.3 初始化

proc_root_init 函数

        作用:初始化proc文件系统。

10.1.4 装载 proc 文件系统

mount   -t proc   proc   /proc

mount   -t ext4   /dev/sdb1   /mnt/data

struct   file_system_type    proc_fs_type   =   {

        .name   =   "proc",

        .mount   =   proc_mount,         // 调用 proc_fill_super。

        .kill_sb   =   proc_kill_sb,

        .fs_flags   =   FS_USERNS_MOUNT,

};

proc_mount

        -> proc_fill_super(struct   super_block   *s)

                -> s->s_op   =   &proc_sops;

10.1.5 管理 /proc 数据项

1. 创建和注册一个数据项

创建函数:

        struct   proc_dir_entry   *proc_create( char  *name,   umode_t  mode,

                struct proc_dir_entry   *parent,    struct file_operations   *proc_fops)

举例:

创建 /proc/ vmallocinfo 文件:

        proc_create("vmallocinfo",   S_IRUSR,   NULL,   &proc_vmalloc_operations);

struct   file_operations    proc_vmalloc_operations   =   {

        .open   =   vmalloc_open,

        .read   =   seq_read,         //读 /proc/vmallocinfo 时调用。

        .llseek   =   seq_lseek,

        .release   =   seq_release_private,

};

辅助函数:

        proc_mkdir:创建新目录。

        proc_symlink:创建符号链接。

2. 查找 proc 数据项

从 /proc 根节点开始查找。

struct   inode_operations    proc_root_inode_operations   =   {

        .lookup   =   proc_root_lookup;

};

10.1.6 读取和写入信息

每个 /proc 文件可自定义 struct   file_operations,自己实现read,write等函数指针。

举例 cat /proc/cpuinfo(不可写)

struct   file_operations    proc_cpuinfo_operations   =   {

        .open       =     cpuinfo_open,

        .read        =     seq_read,

        .llseek      =     seq_lseek,

        .release    =     seq_release,

};

10.1.7 进程相关信息

proc_pid_lookup:负责打开 /proc/<pid>/ 中文件。

10.1.8 系统控制机制

sysctl 系统调用已过时。已移到/proc/sys

注册/proc/sys文件:

        register_sysctl_table(sd_ctl_root);

struct  ctl_table sd_ctl_root[  ]   =   {

{

        .procname   =    "kernel",

        .child            =    sd_ctl_dir,

},

};

struct   ctl_table    sd_ctl_dir[ ]   =   {

        {

                .procname    =    "sched_domain",   //即 /proc/ sys/ kernel/ sched_domain文件。

        },

};

struct   file_operations    proc_sys_file_operations   =   {

        .open   =   proc_sys_open,

        .read   =   proc_sys_read,

        .write   =   proc_sys_write,

};

标签:10.1,10,存储,struct,read,文件系统,operations,file,proc
From: https://blog.csdn.net/qingwangheni/article/details/141313879

相关文章

  • 洛谷 P1540 [NOIP2010 提高组] 机器翻译
    题目概括给定N个整数,和一个容量为M的“字典”,从头到尾依次翻译,每次翻译先看自家字典,没有的话再看别人的字典并存到自家字典,如果自家字典满了,当前单词的翻译会代替最早进入的。做题思路定义一个长度为M的字典数组,依次遍历N个数,每次翻译先检索字典数组,没有的话加入字典并......
  • P1540 [NOIP2010 提高组] 机器翻译 题解
    题目概括给定N个整数,和一个容量为M的“字典”,从头到尾依次翻译,每次翻译先看自家字典,没有的话再看别人的字典并存到自家字典,如果自家字典满了,当前单词的翻译会代替最早进入的。做题思路定义一个长度为M的字典数组,依次遍历N个数,每次翻译先检索字典数组,没有的话加入字典并......
  • 题解:P10844 [EGOI2024] Infinite Race / 无限赛跑
    题解:P10844[EGOI2024]InfiniteRace/无限赛跑有n个人在环形跑道上跑步,和q次超越别人或被别人超越,别人要么在Anika前面,要么在后面怎么说呢,建议降红由于只有重复超过一个人才肯定是跑过一圈的,所以一个数组就行了,每超过一次就打上标记,不然去掉标记。#include<bits/stdc......
  • 吴恩达力荐,100%好评-LangChain大型语言模型(LLM)应用开发
       LangChain是一个开源框架,旨在帮助人工智能开发者将大语言模型(如GPT-4)与外部计算和数据源结合起来。这个框架提供了Python和JavaScript包,使开发者能够轻松地将自己的数据与大语言模型连接起来,从而实现更复杂的人工智能应用。   免费获取:吴恩达力荐,100%好评-Lang......
  • windows10清理缓存命令,windows10清理缓存命令是什么
    在Windows10系统中,清除缓存可以通过多种方法实现,但严格来说,并没有一个单一的“指令”可以一键清除所有类型的缓存。不过,我可以为你介绍几种常用的方法来清除不同类型的缓存。一、使用磁盘清理工具磁盘清理工具是Windows10内置的一个非常实用的工具,可以帮助用户删除不需要的文......
  • 高效微调攻略:10个技巧助你显著提升大模型任务性能
    在大型语言模型(LLMs)的研究和应用中,如何通过微调来适应特定任务是一个关键问题。尽管提示工程(PE)在提升LLMs的零样本学习和上下文内学习方面取得了显著成效,但关于如何设计有效的微调样本以进一步提升LLMs性能的研究还相对欠缺。为解决上述问题,提出了样本设计工程SDE(SampleDe......
  • 达梦数据库部署案例之---DMDSC共享存储集群部署
    案例说明:在Linux环境下部署DMDSC共享存储集群。适用版本:DM8操作系统版本:[root@node201KingbaseHA]#cat/etc/centos-releaseCentOSLinuxrelease7.9.2009(Core)集群架构:如下所示,node1和node2为集群节点:节点信息:[root@node201KingbaseHA]#vi/etc/hosts192.......
  • 北斗/GNSS高精度数据处理暨GAMIT/GLOBK v10.75软件
    随着GNSS导航定位技术在不同领域的广泛应用和技术更新的飞速发展,在大型工程项目的设计、施工、运行和管理各个阶段对工程测量提出了更高的要求,许多测绘、勘测、规划、市政、交通、铁道、水利水电、建筑、矿山、道桥、国土资源、气象、地震等行业部门在大型工程建设过程中需应用......
  • Windows Sandbox failed to initialize. Error 0x80370106
    #报错提示之前都好好的突然打开WindowsSandbox出现上面提示,经过网上搜索,我的版本是24H2(OSBuild26120.1252) #尝试更新到最新版本  ......
  • 10.有线802.1x.1
    802.1x的三大角色withieee802.1xport-basedauthentication,thedevicesinthenetworkhavespecificroles:clientswitchaccesspoint(ap)authenticationserver802.1x认证过程介绍pc接上来,交换机就会给打招呼请求你是否能够支持,如果支持就回eaport-start开始,然后......