linux 创建你的 proc 文件

linux 创建你的 proc 文件,第1张

概述一旦你有一个定义好的 read_proc 函数, 你应当连接它到 /proc 层次中的一个入口项. 使用一个 creat_proc_read_entry 调用:   struct proc_dir_entry *create_proc_read_entry(const char *name,mode_t mode, struct proc_dir_entry *base, read_proc_t

一旦你有一个定义好的 read_proc 函数,你应当连接它到 /proc 层次中的一个入口项. 使用一个 creat_proc_read_entry 调用:

 

struct proc_dir_entry *create_proc_read_entry(const char *name,mode_t mode,struct proc_dir_entry *base,read_proc_t *read_proc,voID *data);

 

 

这里,name 是要创建文件名子,mod 是文件的保护掩码(缺省系统范围时可以作为 0 传递),base 指出要创建的文件的目录( 如果 base 是 NulL,文件在 /proc 根下创建 ),read_proc 是实现文件的 read_proc 函数,data 被内核忽略( 但是传递给 read_proc). 这就是 scull 使用的调用,来使它的 /proc 函数可用做 /proc/scullmem:

 

68

 

 

 

create_proc_read_entry("scullmem",0 /* default mode */,

NulL /* parent dir */,scull_read_procmem,NulL /* clIEnt data */);

 

这里,我们创建了一个名为 scullmem 的文件,直接在 /proc 下,带有缺省的,全局可 读的保护.

 

目录入口指针可用来在 /proc 下创建整个目录层次. 但是,注意,一个入口放在 /proc 的子目录下会更容易,通过简单地给出目录名子作为这个入口名子的一部分 -- 只要这个 目录自身已经存在. 例如,一个(常常被忽略)传统的是 /proc 中与设备驱动相连的入口 应当在 driver/ 子目录下; scull 能够安放它的入口在那里,简单地通过指定它为名子 driver/scullmem.

 

/proc 中的入口,当然,应当在模块卸载后去除. remove_proc_entry 是恢复 create_proc_read_entry 所做的事情的函数:

 

remove_proc_entry("scullmem",NulL /* parent dir */);

 

去除入口失败会导致在不希望的时间调用,或者,如果你的模块已被卸载,内核崩掉.

 

当如展示的使用 /proc 文件,你必须记住几个实现的麻烦事 -- 不要奇怪现在不鼓励使 用它.

 

最重要的问题是关于去除 /proc 入口. 这样的去除很可能在文件使用时发生,因为没有 所有者关联到 /proc 入口,因此使用它们不会作用到模块的引用计数. 这个问题可以简 单的触发,例如通过运行 sleep 100 < /proc/myfile,刚好在去除模块之前.

 

另外一个问题时关于用同样的名子注册两个入口. 内核信任驱动,不会检查名子是否已经 注册了,因此如果你不小心,你可能会使用同样的名子注册两个或多个入口. 这是一个已 知发生在教室中的问题,这样的入口是不能区分的,不但在你存取它们时,而且在你调用 remove_proc_entry 时.

总结

以上是内存溢出为你收集整理的linux 创建你的 /proc 文件全部内容,希望文章能够帮你解决linux 创建你的 /proc 文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1019118.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存