linux 创建你的 /proc 文件
一旦你有一个定义好的 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环境中 1秒内 创建一个超级大文件(100G)的方法
- linux环境中,如何通过手动创建crontab文件的方式来设置crontab定时调度任务?
- Linux 虚拟机内挂载 iso 文件
- 修改linux的最大文件句柄数限制
- STM32MP157 Linux系统移植开发篇2:烧写linux镜像
- Linux有问必答 - 如何在linux上安装WPS
- Livepatch —— 免重启给 Ubuntu Linux 内核打关键性安全补丁
- 如何在Linux下创建一个不可变更的文件
- Linux学习笔记——如何使用echo指令向文件写入内容
- linux编辑文件出现write.error.(file.system.full?)
- linux环境两台服务器间利用定时任务同步文件脚本
- docker在linux中的安装
- linux通常使用的 rc 和 .(点)文件
- linux中权限的修改
- VMware创建Linux虚拟机之(三)Hadoop安装与配置及搭建集群
- 如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件
- linux编程fcntl获取和设置文件状态
- Linux命令:Linux创建文件4种方式、ps命令显示进程状态、let命令执行一个或多个表达式
- Linux OOM Killer 保护机制
- Linux中连接mysql执行sql文件
- 学习Linux二(创建、删除文件和文件夹命令)
- Linux中/etc/rc开头文件详细解释
- linux下系统启动时,几个配置文件 /etc/profile、~/.bash_profile 等几个文件的执行过程,先后顺序
- .xz文件解压及linux常见压缩
- linux创建指定大小的文件
- Linux 上配置 AG
- Linux CentOS 各个版本的区别