proc文件系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

10
seq_file操作procfs步骤( seq_open 1)
I. 在proc文件下创建自己的文件 static inline struct proc_dir_entry *proc_create(
const char *name, umode_t mode, struct proc_dir_entry *parent,
create_proc_read_entry 和create_proc_entry接口在新版 本的内核中已经废弃
4
seq_file
内核通过在procfs文件系统下建立文件来向用户空间提供输出信息, 用户空间可以通过任何文本阅读应用查看该文件信息,但是procfs 有 一个缺陷,如果输出内容大于1个内存页,需要多次读,因此处理起来 很难,另外,如果输出太大,速度比较慢,有时会出现一些意想不到 的情况。
6
seq_file操作procfs的方式
single_open方式 此种方式为简单方式对应的释放函数为 single_release seq_open方式 此种方式为复杂方式对应的释放函数为 seq_release
7
seq_file操作procfs步骤( single_open 1)
I. 在proc文件下创建自己的文件
procfs
2
proc文件系统概要
虚拟文件系统
驻留于内存、不占用存储空间
创建和显示内核内部的资源视窗
数据是在内核运行过程中产生的
用于配置内核参数、查看内核结构体、从设备驱 动程序中收集统计信息、获取通用的系统信息 在系统启动过程中挂载在/proc目录
3
proc文件系统操作示例1
糟 糕 的 实 现 方 式
在结束时候被调用,完成一些清理工作
void *next(struct seq_file *sfile, void *v, loff_t *pos); 将迭代位置前移,并返回下一个迭代对象的指针。此函数对于迭代对 象的内部结构体是不可知的,并将其看作透明对象。 int show(struct seq_file *sfile, void *v); 用于解释传递给它的迭代对象,并在用户读取相应的procfs文件时,产 生显示的输出字符串。此方法使用一些辅助函数,seq_printf、seq_puts、 seq_putc来格式化输出。 seq文件接口自动激活迭代函数,以响应用户的操作并在相关的procfs文 件中输出信息。你不用担心基于页面大小的缓冲区,也不必标识数据结尾。
static inline struct proc_dir_entry *proc_create( const char *name, umode_t mode, struct proc_dir_entry *parent, const struct file_operations *proc_fops)
实现seq_operations实例的start、stop、next、show接口
14
seq_file操作procfs步骤( seq_open 4)
删除自己创建的proc文件
输出
const struct file_operations *proc_fops) II. 提供struct file_operations 实例 static const struct file_operations uptime_proc_fops = { .open .read .llseek .release }; III. 提供提供struct seq_operations实例 .start = myproc_seq_start, .stop = myproc_seq_stop, .next = myproc_seq_next, .show = myproc_seq_show, }; IV. V. VI. seq_open函数建立proc文件和seq_operations实例的映射关系 实现seq_operations实例的start、stop、next、show接口 删除自己创建的proc文件 static struct seq_operations myproc_seq_ops = { = myproc_open, = seq_read, = seq_lseek, = seq_release,源自};III. V.
single_open建立具体的输出函数show 删除自己创建的proc文件
IV. 实现自定义的show函数
8
seq_file操作procfs步骤( single_open 2)
9
seq_file操作procfs步骤( single_open 3)
Proc文件很少用于写,要实现写功能只要在struct file_operations 实 例中初始化write成员即可
头文件位置 <linux/seq_file.h>
seq_operations结构
5
seq_file-- seq_operations结构接口说明
void *start(struct seq_file *sfile, loff_t *pos);
首先被seq接口调用,用于初始化迭代系列的位置,并返回找到的第一个 迭代对象 void stop(struct seq_file *sfile, void *v);
11
seq_file操作procfs步骤( seq_open 2)
创建和销毁proc文件
12
seq_file操作procfs步骤( seq_open 3)
提供struct seq_operations实例
seq_open函数建立proc文件和seq_operations实例的映射关系
13
seq_file操作procfs步骤( seq_open 3)
II.
提供struct file_operations 实例
.open .read .llseek .release = myproc_open, = seq_read, = seq_lseek, = single_release,
static const struct file_operations uptime_proc_fops = {
相关文档
最新文档