proc文件系统一些常用说明

来源:互联网 发布:淘宝小二介入 编辑:程序博客网 时间:2024/05/03 02:45

在分析网卡驱动时经常会碰到proc文件系统的创建,熟悉proc文件系统的一些函数的含义对理解代码是很有必要的,现在做一个记录,备以后查看

Proc 路径快捷变量

proc_dir_entry          在文件系统中的位置

proc_root_fs             /proc

proc_net                 /proc/net

proc_bus                 /proc/bus

proc_root_driver         /proc/driver

1、 create_proc_entry 创建proc 文件 
struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode,struct proc_dir_entry *parent);

name: 要创建的文件名称;

mode: 该文件的保护掩码;

parent: 确定文件所在目录,如果置NULL ,则位置为/proc 下。

2、 proc_mkdir 创建目录

/* 该函数在父目录parent 下创建一个目录name* */

struct proc_dir_entry * proc_mkdir (const char *name,struct proc_dir_entry *parent);

@name : 要创建的目录名

@parent : 这个目录的父目录

3、 remove_proc_entry 删除文件或目录

/* 这个函数从proc 文件系统中删除一个文件或目录。

注意:1 。是通过参数name ,而不是通过创建时返回的指针来删除的。

* 2 。该函数不会递归删除目录下的文件。

* 3 。data 变量保存了分配的内存,要先释放对应内存,再删除该文件。

* */

void remove_proc_entry (const char *name,struct proc_dir_entry *parent);

@name : 要删除的文件或目录名

@parent : 所在的父目录

5、 create_proc_read_entry 创建只读proc 文件

struct proc_dir_entry * create_proc_read_entry (const char

*name,mode_t mode,struct proc_dir_entry *parent,read_proc_t*

read_proc,void *data);

@name : 要创建的文件名

@mode : 要创建的文件的属性 默认0755

@parent : 这个文件的父目录

@read_proc : 当用户读这个文件时,内核调用的函数

@data : 传给read_proc 的参数

6、 Read_func 读函数

int read_func (char *buffer,char **stat,off_t off,int count,int *peof,void *data);

@buffer : 把要返回给用户的信息写在buffer 里,最大不超过PAGE_SIZE (一般4K )

@stat : 一般不使用

@off :buffer 的偏移量

@count : 用户要取的字节数

@peof : 读到文件尾时,把peof 指向的位置置1

@data : 被多个proc 文件定义为读时,通过data 传递参数

注意:返回值必须是sprintf 返回的长度值,如果返回0 在读取的时候会读不到结果。


7 、写函数write_func 
/*
 该函数最多从buffer 中读取count 个字节的数据。

注意:buffer 地址在用户空间,需要先用copy_from_user() 把这些数据拷贝到内核中。* */

int write_func (struct file *file,const char *buffer,unsigned long count,void *data);

@file : 该proc 文件对应的file 结构,一般忽略。

@buffer : 待写的数据所在的位置

@count : 待写数据的大小

@data : 同read_func

注意:返回值应该是实际写入的字符串长度