Linux proc 的文件系统的源码分析(2)

b. static inline 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)

创建函数体传进的指定的read proc文件的方法 read_proc_t *read_proc; 

实际上这个函数存在的意义不是很大,直接可以使用create_proc_entry来替代,在多做一件事情,就是指定proc_dir_entr->read_proc=read_proc;


如果不想默认的proc file 的操作函数,你也可以自己指定自己的操作函数,只要用create_proc_entry返回的proc_dir_entry结构体里直接指定proc_fops指针指向自己的定义的结构体,就可以了

比如:

static struct file_operations proc_my_operations = {
.open= my_open,
.read= my_read,

.write              = my_write
.llseek=  my_lseek,
.release=   my_release,
};


/proc/stat  /proc/interrupts ... 显示系统运行状态的设计技巧

象stat,interrupts 的这样反应系统状态的文件,

首先系统的状态实际上都是已经在系统的内存中,

其次如果没有别的进程对该文件监视,是不需要往这个文件里写内容的

哪怕在时间中断中去写这个文件(内存的一次复制),也是没有必要的,第一有系统的开销,第二没有人关注它,第三不可控性

所以对于系统状态的监听,应该是由外部(想监听的系统)来触发的,不需要内核时时刻刻去写系统状态文件,那么这样的设计就很简单了,内核只要在open的函数里去写当时的状态就足够了。

也就是对外部系统按照自己的频率去打开这个文件,内核复制状态到proc文件中,然后进程读出内容到自己的用户空间,然后关闭这个文件。关闭这个动作就非常重要,如果不关闭,那么里面的内容将不会在跟新。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/22868.html