《Linux内核编程》第四章:proc文件系统 http://blog.csdn.net/tankai19880619/article/details/8032204
来源:互联网 发布:amos软件哪里下载 编辑:程序博客网 时间:2024/09/21 09:02
《Linux内核编程》第四章:proc文件系统
一、proc的作用
在Linux系统中,对于内核模块,除了平常的方式,还可以使用特别的方式来向用户进程传递信息——proc文件系统。
proc文件系统设计的初衷是为了方便地访问进程信息,但是现在该文件系统得到了很大的扩展,它反映了当前运行系统的信息映像,如/proc/meminfo反映了当前内存的使用情况,/proc/modules反映了当前模块的装载情况。
如:cat /proc/meminfo cat /proc/cpuinfo cat /proc/modules
proc文件系统是对在内存中运行的系统的直接反映,它使用层次式的方式来表示系统。通过proc,我们能够方便地了解内核信息和当前正在运行着的进程的信息。因此,一些shell命令可以很方面地使用这些信息来显示系统当前状况,如ps命令。
二、创建proc文件系统的机制
创建proc文件的方式和编写驱动程序的方法相似。你至少需要定义两个函数——init_module和cleanup_module(或module_init和module_exit)函数,初始化函数用于创建proc文件并初始化,而退出函数用于清除proc文件并释放申请的内存空间等。
为了创建一个proc文件,你需要在init_module(或module_init)函数中使用create_proc_entry来创建一个proc文件句柄。该句柄是一个 struct proc_dir_entry类型的指针。然后,你需要设置这个指针的某些函数指针域,这样当用户在应用程序中通过read/write来读写这个proc文件时,就会调用这些指针域的函数来进行具体处理,就如同编写驱动程序中需要设置fops结构体一样。
结构体struct proc_dir_entry的类型定义如下:
struct proc_dir_entry{
unsigned int low_ino;
unsigned short namelen;
const char *name;
mode_t mode;
nlink_t nlink;
uid_t uid;
gid_t gid;
unsigned long size;
struct inode_operations *proc_iops;
struct file_operations *proc_fops;
get_info_t *get_info;
struct module *owner;
struct proc_dir_entry *next, *parent, subdir;
void *data;
read_proc_t *read_proc;
write_proc_t *write_proc;
atomic_t count;
int deleted;
void *set;
}
其中read_proc和write_proc是proc接口;通过设置这两个域,那么当我们在用户空间中读该proc文件时,read_proc对应的函数被调用;类似的,当我们在用户空间中写该proc文件时,write_proc对应的函数被调用。
版权声明:本文为博主原创文章,未经博主允许不得转载。
- 《Linux内核编程》第四章:proc文件系统 http://blog.csdn.net/tankai19880619/article/details/8032204
- [置顶] 《Linux启动过程分析》内核挂载根文件系统 http://blog.csdn.net/tankai19880619/article/details/12093239
- 使用 /proc 文件系统来访问 Linux 内核的内容 http://blog.csdn.net/diy534/article/details/6802311
- proc编程的一个简单例子 http://blog.csdn.net/mailbox2005/article/details/3881538
- linux 中/proc 详解 http://blog.csdn.net/kevinx_xu/article/details/8178746
- Linux--根文件系统的挂载过程分析 http://blog.csdn.net/guopeixin/article/details/5962482
- Linux虚拟文件系统(概述) http://blog.csdn.net/bullbat/article/details/7241273
- linux内核mount系统调用源码分析 http://blog.csdn.net/wugj03/article/details/41958029
- Linux内核大讲堂 (三) 解不开的"/"情结 http://blog.csdn.net/z2007b/article/details/6575809
- Linux内核中的进程组及会话 http://blog.csdn.net/daniel_h1986/article/details/6067685
- Linux内核地址映射模型 http://blog.csdn.net/f22jay/article/details/7925531
- 详解Linux内核红黑树算法的实现 http://blog.csdn.net/npy_lp/article/details/7420689
- Linux内核中Netfilter架构介绍http://blog.csdn.net/wuruixn/article/details/7957368
- 深入理解Linux内核-第七章 进程调度 http://blog.csdn.net/sailor_8318/article/details/2460177
- linux 裁剪 http://blog.csdn.net/jinsen/article/details/4890970
- Linux管道编程实例 http://blog.csdn.net/pcliuguangtao/article/details/6453743
- Linux 守护进程的编程方法 http://blog.csdn.net/hairetz/article/details/4195036
- 《Linux内核编程》第四章:proc文件系统
- 关于现代CPU,程序员应当更新的知识
- php中关于mysqli和mysql区别的一些知识点分析
- c++ primer plus 第九章-定位new运算符
- Neural Networks and Deep Learning
- Tomcat不同版本所对应的Servlet/JSP规范
- 《Linux内核编程》第四章:proc文件系统 http://blog.csdn.net/tankai19880619/article/details/8032204
- sizeof必须要知道的那些事
- MNIST手写字体结构
- iOS9搜索新功能将狙击谷歌的搜索业务
- 动态链接库两种调用方式的比较
- ios 经典错误:"duplicate symbol _OBJC_METACLSS_$_类名 in"
- 打地鼠游戏实现
- 关于学校开设的计算机专业课的一点想法
- Gearman安装