第10章 无持久存储的文件系统 (2)
目录
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章 无持久存储的文件系统 (2)
目录 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文件…...
云计算实训29——mysql主从复制同步、mysql5.7版本安装配置、python操作mysql数据库、mycat读写分离实现
一、mysql主从复制及同步 1、mysql主从自动开机同步 2、配置mysql5.7版本 mysql-5.7.44-linux-glibc2.12-x86_64.tar 启动服务、登录 对数据库进行基本操作 3、使用python操纵mysql数据库 4、编辑python脚本自动化操纵mysql数据库 二、mycat读写分离实现 1.上传jdk和mycat安装…...
AI搜索引擎Perplexica的本地部署(之二)Perplexica的非docker安装
Perplex 是一个开源的AI 驱动的搜索引擎,可以使用 Grok 和 Open AI 等模型在计算机上本地安装和运行。它为学术研究、写作、YouTube 和 Reddit 提供了一系列搜索功能。用户可以通过选择不同的模型、设置本地嵌入模型和探索各种搜索选项来定制他们的体验。该工具演示…...
Oracle环境下在相同参数和数据源的情况,mybatis-plus查询和sql查询结果不一致
场景: 在系统中某个对象执行修改的时候,查询对象为空,造成修改报错 分析: 在传参中有一个eq的参数需要传null,mybatis-plus在执行eq时可能是拼成" null",但是oracle中查null必须要用is null, null是查不出东西的 解决: 改成用sql查询修改,或者加判断如果这个参…...
springboot静态资源访问问题归纳
以下内容基于springboot 2.3.4.RELEASE 1、默认配置的springboot项目,有四个静态资源文件夹,它们是有优先级的,如下: "classpath:/META-INF/resources/", (优先级最高) "classpath:/reso…...
HTML与CSS学习Day01
文章目录 一 、CSS技巧1.1 CSS精灵(CSS Sprites)1.1.1 实现步骤1.1.2 例子 1.2 字体图标1.2.1如何使用字体图标1.2.2 字体图标使用总结 1.3 垂直对齐方式vertical-align1.3.1 值1.3.2 例子 1.4 过渡效果transition1.4.1 CSS过渡效果(transiti…...
Tina-Linux Bootloaer简述
Tina-Linux Bootloaer简述 目录介绍 ubuntuubuntu1804:~/tina-v2.0-sdk/lichee/brandy-2.0$ tree -L 1 . ├── build.sh ├── opensbi ├── spl //boot0 ├── spl-pub //boot0 ├── tools └── u-boot-2018 /ubootTina-Linux 启动流程简述...
【Python】 Scrapyd:Python Web Scraping 的强大分布式调度工具
我听见有人猜 你是敌人潜伏的内线 和你相知多年 我确信对你的了解 你舍命救我画面 一一在眼前浮现 司空见惯了鲜血 你忘记你本是娇娆的红颜 感觉你我彼此都那么依恋 🎵 许嵩《内线》 在网络爬虫项目中,Scrapy 是 Python 中最流行和…...
吴恩达机器学习课后题-01线性回归
线性回归 一.单变量线性回归题目损失函数(代价函数)梯度下降函数代价函数可视化整体代码 二.多变量线性回归特征归一化(特征缩放)不同学习率比较 正规方程正规方程与梯度下降比较 使用列表创建一维数组使用嵌套列表创建二维数组&a…...
白盒报告-jacoco
使用jacoco--执行nvn test 运行过程: 1、idea执行mvn test ,运行过程如下: a.maven-surefire-plugin:0.8.7执行目标动作:prepare-agent, 目的是:执行目标动作是为了在当前的项目名下生成jecoco.…...
【MySQL】SQL语句执行流程
目录 一、连接器 二、 查缓存 三、分析器 四、优化器 五、执行器 一、连接器 学习 MySQL 的过程中,除了安装,我们要做的第一步就是连接上 MySQL 在一开始我们都是先使用命令行连接 MySQL mysql -h localhost -u root -p 你的密码 使用这个命令…...
Selenium自动化防爬技巧:从入门到精通,保障爬虫稳定运行,通过多种方式和add_argument参数设置来达到破解防爬的目的
在Web自动化测试和爬虫开发中,Selenium作为一种强大的自动化工具,被广泛用于模拟用户行为、数据抓取等场景。然而,随着网站反爬虫技术的日益增强,直接使用Selenium很容易被目标网站识别并阻止。因此,掌握Selenium的防爬…...
从数据类型到变量、作用域、执行上下文
从数据类型到变量、作用域、执行上下文 JS数据类型 分类 1》基本类型:字符串String、数字Number、布尔值Boolean、undefined、null、symbol、bigint 2》引用类型:Object (Object、Array、Function、Date、RegExp、Error、Arguments) Symbol是ES6新出…...
一文读懂:AI时代到底需要什么样的网络?
各位小伙伴们大家好哈,我是老猫。 今天跟大家来聊聊数据中心网络。 提到网络,通常把网络比作高速公路,网卡相当于上下高速公路的闸口,数据包就相当于运送数据的汽车,交通法规就是“传输协议”。 如高速公路也会堵车一…...
基于HarmonyOS的宠物收养系统的设计与实现(一)
基于HarmonyOS的宠物收养系统的设计与实现(一) 本系统是简易的宠物收养系统,为了更加熟练地掌握HarmonyOS相关技术的使用。 项目创建 创建一个空项目取名为PetApp 首页实现(组件导航使用) 官方文档:组…...
严格模式报错
部分参考: Android内存泄露分析之StrictMode - 星辰之力 - 博客园 (cnblogs.com)...
nginx: [emerg] the “ssl“ parameter requires ngx_http_ssl_module in nginx.conf
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:42 查看/usr/local/nginx/conf/nginx.conf文件第42行数据: listen 443 ssl; # server中的配置 原因是:nginx缺少 http_ssl_modul…...
Docker 部署loki日志 用于微服务
因为每次去查看日志都去登录服务器去查询相关日志文件,还有不同的微服务,不同日期的文件夹,超级麻烦,因为之前用过ELK,原本打算用ELK,在做技术调研的时候发现了一个轻量级的日志系统Loki,果断采…...
[Day 57] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
區塊鏈的零知識證明技術 一、引言 隨著區塊鏈技術的不斷發展,如何在保護用戶隱私的同時確保數據的完整性和可信度成為了研究的焦點。零知識證明(Zero-Knowledge Proof,ZKP)技術就是其中的一項關鍵技術,它允許一方在不…...
06结构型设计模式——代理模式
一、代理模式简介 代理模式(Proxy Pattern)是一种结构型设计模式(GoF书中解释结构型设计模式:一种用来处理类或对象、模块的组合关系的模式),代理模式是其中的一种,它可以为其他对象提供一种代…...
Analog Discovery 2:口袋实验室如何用FPGA重塑硬件调试体验
1. 口袋里的实验室:为什么我们需要Analog Discovery 2?作为一名在硬件开发一线摸爬滚打了十多年的工程师,我太熟悉那种面对复杂项目时,被实验室设备“卡脖子”的窘迫感了。你想验证一个想法,或者排查一个棘手的信号问题…...
Gita异步执行机制详解:高效管理大型项目的核心技术
Gita异步执行机制详解:高效管理大型项目的核心技术 【免费下载链接】gita Manage many git repos with sanity 从容管理多个git库 项目地址: https://gitcode.com/gh_mirrors/gi/gita 在现代软件开发中,开发者经常需要同时管理多个Git仓库。随着项…...
7.Linux笔记:shell
1.shellshell就是Linux内核的一个外层保护工具,并负责完成用户与内核之间的交互。用户>shell>内核>硬件内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,内核决定一个程序…...
Docker Compose部署Nginx Proxy Manager保姆级教程:从端口映射到数据持久化全解析
Docker Compose部署Nginx Proxy Manager全流程精解:从架构设计到生产级实践 当你面对数十个需要反向代理的服务时,手动编辑Nginx配置文件的繁琐程度足以让人望而生畏。Nginx Proxy Manager的出现彻底改变了这种局面——这个基于Docker的开源解决方案将复…...
FanControl传感器无法检测?终极修复指南让风扇控制重回正轨
FanControl传感器无法检测?终极修复指南让风扇控制重回正轨 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendi…...
基于合宙Air001的交互式地球名片:从硬件焊接、Arduino编程到触摸优化
1. 项目概述与核心思路最近在创客圈子里,合宙的Air001开发板可以说是火得一塌糊涂。包装设计得挺酷,价格更是香到没朋友,最关键的是它完美支持Arduino IDE开发,对于咱们这些习惯了Arduino生态的玩家来说,上手门槛几乎为…...
C语言状态模式实战:从设计思想到嵌入式状态机实现
1. 项目概述:从“状态”到“模式”的思维跃迁在嵌入式开发、游戏逻辑、网络协议解析乃至日常的业务流程控制中,我们常常会面对一个核心挑战:如何优雅地管理一个对象随着内部条件改变而表现出的不同行为?比如,一个自动售…...
启扬RK3568核心板如何赋能智能炒菜机:从嵌入式主控到AI烹饪
1. 项目概述:当嵌入式核心板遇上智能炒菜机在餐饮后厨这个看似传统,实则对效率、成本和一致性要求极高的领域,痛点一直非常明确。人工炒菜,老师傅的手艺固然可贵,但出餐速度受限于体力,菜品口味因厨师状态、…...
全域数学公理体系下Navier-Stokes方程本源证明(正式论文版)
全域数学公理体系下Navier-Stokes方程本源证明(正式论文版) 作者:乖乖数学 成文日期:2026年5月25日 体系归属:全域数学大典卷七数学物理应用层 核心立论:光速恒定公理、时空曲率公理、四维通量守恒公理格式…...
C语言日志分级系统设计:从原理到工业级实现
1. 项目概述:为什么日志分级是C项目的“体检报告” 在C语言项目里,尤其是那些需要长期稳定运行的后台服务、嵌入式系统或者网络中间件,日志系统就是开发者的“眼睛”和“耳朵”。没有它,程序就像在黑箱里运行,一旦出问…...
