加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux 创建你的 /proc 文件

发布时间:2020-12-13 23:13:51 所属栏目:Linux 来源:网络整理
导读:一旦你有一个定义好的 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_pr

一旦你有一个定义好的 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 时.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读