Linux下proc文件系统介绍与应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yk150915/article/details/85018767

proc文件系统的作用

(1) 内核项目太庞大,调试困难,引入新的调试方法。

(2) proc文件系统的思路是:在内核中构建一个虚拟文件系统/proc,内核运行时将内核中一些关键的数据结构以文件的方式呈现在/proc目录下的一些特定文件中, 这样相当于将不可见的内核中的数据结构以可视化的方式呈现给内核开发者。

(3) proc文件系统给了开发者一种调试内核的方法:我们通过实时的观察/proc/xxx文件,来观看内核中特定数据结构的值。在我们添加一个新功能的前后来对比,就可以知道这个新功能产生的影响对还是不对。

(4)proc目录下的文件大小都是0,因为这些文件本身并不存在于硬盘中,它也不是一个真实文件,它只是一个接口,当我们去读取这个文件时,其实内核并不是去硬盘上找这个文件,而是映射为内核内部一个数据结构被读取并且格式化成字符串返回给我们。 所以尽管我们看到的还是一个文件内容字符串,和普通文件一样的,但是实际上我们知道这个内容是实时的从内核数据结构中读取的,而不是硬盘中的。

扩展出sys文件系统

(1)sys文件系统本质上和proc文件系统是一样的,都是虚拟文件系统,都在根目录下有个目录(一个是/proc目录,另一个是/sys目录),因此都不是硬盘中的文件,都是内核中的数据结构的可视化接口。

(2)不同的是/proc中的文件只能读,但是/sys中的文件可以读写。读/sys中的文件就是获取内核中数据结构的值,而写入/sys中的文件就是设置内核中的数据结构的元素的值。

(3)历史上刚开始先有/proc文件系统,人们希望通过这种技术来调试内核。实际做出来后确实很有用,所以很多内核开发者都去内核调试代码向/proc目录中写文件,而且刚开始的时候内核管理者对proc目录的使用也没有什么经验也没什么统一规划,后来的结果就是proc里面的东西又多又杂乱。

(4)后来觉得proc中的内容太多太乱缺乏统一规划,于是乎又添加了sys目录。sys文件系统一开始就做了很好的规划和约定,所以后来使用sys目录时有了规矩。

创建/proc文件系统

(1)创建目录
struct proc_dir_entry *proc_mkdir(const char *name, struct proc_dir_entry *parent);
参数1:name就是要创建的文件夹名称。
参数2:parent是要创建节点的父节点。也就是要在哪个文件夹之下创建新文件夹,需要将那个文件夹的proc_dir_entry传入。
如果是在/proc目录下创建文件夹,parent为NULL。
(2)proc文件的创建
static inline struct proc_dir_entry *proc_create(const char *name, mode_t mode, struct proc_dir_entry *parent, const struct file_operations *proc_fops);
参数1:name就是要创建的文件名。
参数2:mode是文件的访问权限,以UGO的模式表示(如0666)。
参数3:parent与proc_mkdir中的parent类似。也是父文件夹的proc_dir_entry对象。
参数4:proc_fops就是该文件的操作函数了。
(3)proc文件的删除
remove_proc_entry(const char *name, struct proc_dir_entry *parent);

具体代码实现参考上一篇博文:地址

猜你喜欢

转载自blog.csdn.net/yk150915/article/details/85018767