proc_create("mdstat", S_IRUGO, NULL, &md_seq_fops); 而我之前写proc下东西的时候经常用create_proc_entry,故看看有什么区别。 1. create_proc_entry比proc_create多了一个赋值默认文件操作的动作 对于规则文件, dp->proc_fops = &proc_file_operations; 而 static const struct file_operations proc_file...
可以将seq_file的private成员转换成对应的类型进行使用。 也就是说,可以通过seq_file的private成员将data参数传递到show函数中*/ return single_open(file, my_proc_show, NULL); } /*2,填充proc_create函数中调用的flie_operations结构体 其中my开头的函数为自己实现的函数, seq和single开头为内核实现好的函数,...
static int snmp6_seq_show(struct seq_file *seq, void *v); //这是将打开要显示的snmp6文件。 static int snmp6_seq_open(struct inode *inode, struct file *file); //dev文件的打开,我猜测是类似/proc/net/dev文件。 static int snmp6_dev_seq_show(struct seq_file *seq, void *v); static ...
proc_create方式的实现其实在/fs/proc/文件夹下有很多例子,如cmdline.c/version.c等,对应申明等动作上面已经给出,这边就不再重复了,直接写一个proc_create方式的例子吧。 static int proc_test2_show(struct seq_file *seq, void *v) { seq_printf(seq...
.release = seq_release }; static void __init ioc_proc_init(void) { Expand All @@ -1964,7 +1951,7 @@ ioc_proc_init(void) if (!dir) return; proc_create(ioc_list->name, 0, dir, &ioc_fops); proc_create_seq(ioc_list->name, 0, dir, &ioc_seq_ops); } #endif Expand Down ...
const struct seq_operations *op; //操作实际底层数据的函数 void *private; }; 这里我们大致介绍下struct seq_operations中的各个函数的作用: void * (*start) (struct seq_file *m, loff_t *pos); start 方法会首先被调用,它的作用是在设置访问的起始点。
void * (*next) (struct seq_file *m, void *v, loff_t *pos); int (*show) (struct seq_file *m, void *v); }; start可以做一些资源获取和初始化工作,相当c++的构造函数的作用,它的返回值会作为第一次调用show与next的第二个参数传给他们,之后每次会调用next,和show;start若返回NULL则直接调用st...
则创建proc节点...如下是rtc_proc_fops的结构: static const struct file_operations rtc_proc_fops = { .open = rtc_proc_open,...read = seq_read, .llseek = seq_lseek, .release = rtc_proc_release, }; 当系统打开这个文件的时候就调用到open函数,这都是...proc文件系统的执行过程,不是这部分的...
start方法通常被首先调用。这个方法的函数原型是: void *start(struct seq_file *sfile, loff_t *pos); sfile没什么作用,通常被忽略。pos参数是一个整型,表示从哪个位置开始读。关于位置的定义完全取决于函数实现;它不一定要是结果文件中的一个字节位置。 由于seq_file机制通常是利用一个特定的结构序列实现的,...
proc_create_data("driver/rtc", 0, NULL, &rtc_proc_fops, rtc); //如果是,则创建proc节点...如下是rtc_proc_fops的结构: static const struct file_operations rtc_proc_fops = { .open = rtc_proc_open,...yes\n"); if (ops->proc) ops->proc(rtc->dev.parent, seq); //驱动是否支持...