3.10.17 procfs示例
/*
* wesley
* the linux module sample of procfs
*
* wesley for testing
* 2013-12-23 14:50:14
* insmod sampleproc.ko 加载模块
* rmmod sampleproc 卸载模块
* dmesg 来查看显示内容
* lsmod 显示加载模块
http://blog.chinaunix.net/uid-23390992-id-3026872.html
http://blog.chinaunix.net/uid-24432676-id-2607766.html
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/slab.h>
#include <linux/fs.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <net/net_namespace.h>
#include <linux/mm.h>
MODULE_LICENSE("XJLI/GPL");
struct proc_data_t{
int a;
int b;
} ;
struct _DATA_INFO{
int data1;
int data2;
};
static struct _DATA_INFO data_info[2];
static void *sampleproc_seq_start(struct seq_file *s, loff_t *pos)
{
static unsigned long counter = 0;
if ( *pos == 0 )
{
return &counter;
}
else
{
*pos = 0;
return NULL;
}
}
static void *sampleproc_seq_next(struct seq_file *s, void *v, loff_t *pos)
{
return NULL;
}
static void sampleproc_seq_stop(struct seq_file *s, void *v)
{
}
static int sampleproc_seq_show(struct seq_file *s, void *v)
{
struct inode *i = s->private;
struct _DATA_INFO *info = PDE_DATA(i);
seq_printf(s, "%d----%d", info->data1, info->data2);
return 0;
}
struct proc_data_t data;
static struct seq_operations sampleproc_seq_ops = {
.start = sampleproc_seq_start,
.next = sampleproc_seq_next,
.stop = sampleproc_seq_stop,
.show = sampleproc_seq_show
};
static int sampleproc_proc_open(struct inode *inode, struct file *file)
{
int ret = seq_open(file, &sampleproc_seq_ops);
if (!ret) {
struct seq_file *sf = file->private_data;
sf->private = inode;
}
return ret;
}
static const struct file_operations sampleproc_file_ops = {
.owner = THIS_MODULE,
.open = sampleproc_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = seq_release,
};
static int sampleproc_init(void)
{
//struct proc_dir_entry *proc;
data.a = 10;
data.b = 20;
printk(KERN_INFO "sampleproc_init");
data_info[0].data1=1;
data_info[0].data2=2;
proc_create_data("proc_test1", 0, NULL, &sampleproc_file_ops, &data_info[0]);
data_info[1].data1=3;
data_info[1].data2=4;
proc_create_data("proc_test2", 0, NULL, &sampleproc_file_ops, &data_info[1]);
/*第三个参数设置为NULL,默认在/proc/下建立名字为test_proc的文件*/
//proc = proc_create("sampleproc", 0, NULL, &sampleproc_file_ops);
//if (!proc)
// goto -1;
return 0;
}
static void sampleproc_exit(void)
{
printk(KERN_INFO "sampleproc_exit");
remove_proc_entry("proc_test1", NULL);
remove_proc_entry("proc_test2", NULL);
}
module_init(sampleproc_init);
module_exit(sampleproc_exit);
3.10.17 procfs示例的更多相关文章
- 背水一战 Windows 10 (17) - 动画: ThemeTransition(过渡效果)
[源码下载] 背水一战 Windows 10 (17) - 动画: ThemeTransition(过渡效果) 作者:webabcd 介绍背水一战 Windows 10 之 动画 ThemeTrans ...
- 发现struct proc_dir_entry内核3.10.17移到internal中去了,倒
struct proc_dir_entry 原:2.6.38.8 在#include <linux/proc_fs.h> 现:3.10.17 在fs/proc/internal.h:str ...
- Windows 8.1 正式版微软官方原版镜像下载(新增10/17新版下载)
中文版:中国区OEM预装版本,特定国家版,锁定语言,其它功能和核心版没有区别.简体中文单语言版:锁定语言,其它功能和核心版没有区别.专业版+核心版[零售版][推荐]:镜像内包含专业版(Professi ...
- Dell Technology Summit(2018.10.17)
时间:2018.10.17地点:北京国家会议中心
- 10.17 NOIP模拟赛
目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...
- WIN8.1 PRO RTM VOL.Enterprise.2013.10.17
Windows 8.1 Pro VL (x64) - DVD (Chinese-Simplified)ISO|Chinese - Simplified|发布日期: 2013/10/17文件名: cn_ ...
- 2020.10.17 JZOJ 提高B组T2 导弹拦截
2020.10.17 JZOJ 提高B组T2 导弹拦截 题目 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统. 敌国的导弹形成了立体打击,每个导弹可以抽象成一个三维空间中的 ...
- Lucene 4.10.2开发示例
这里面用的是比较新的Lucene4.10.2 做的一个实例.(lucene的索引不能太大,要不然效率会很低.大于1G的时候就必须考虑分布索引的问题) 先介绍一下Lucene的几个参数意义: Index ...
- 10.17 linux 文件权限
文件权限模拟练习 [root@wen ~]# groupadd incahome[root@wen ~]# usersdd oldboy -g incahome-bash: usersdd: comm ...
随机推荐
- linux系统下nodejs安装过程随记
首先下载适合的版本.这里我使用的是node v.10.36 先介绍编译安装的详细过程. 下载该版本: wget http://nodejs.org/dist/v0.10.36/node-v0.10.3 ...
- 理解 OpenStack 高可用(HA) (4): Pacemaker 和 OpenStack Resource Agent (RA)
本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...
- 使用虚拟按钮(Ghost Buttons)的25个网站
2014年已经过去大半年了,我们看到网页设计领域出现新的设计趋势. 虚拟按钮(Ghost Buttons)是指具备基本的按钮形状的透明按钮,但有细实线的边框.有些虚拟钮是互动的,点击之后按钮可能会成为 ...
- 【javascript激增的思考03】MVVM与Knockout
前言 今天搞的有点快,因为上午简单研究了下MVC,发现MVC不太适合前端开发,然后之前看几位前端前辈都推荐前端使用MVVM,但是我对其还不甚了解,所以我觉得下午还是应该先看看他是神马先,后面再决定要不 ...
- HTML5拖拽实例
最近应该会用到,借用一下......小妹儿,你又变懒了 拖拽相关属性 draggable属性是html5的全局属性,是html5支持拖放操作的方式之一,用来表示元素是否可以被拖放,draggable有 ...
- ALV的颜色分为行的颜色、列的颜色和CELL的颜色
ALV的颜色分为行的颜色.列的颜色和CELL的颜色.任务要求,将一定的Tabellenfeld 用黄色填充,也就是说CELL的颜色 DATA:ls_cellcolorTYPElvc_s_scol,co ...
- An interesting experiment on China’s censorship
This paper presented a very interesting topic. Censorship in China has always drawn people's attenti ...
- html ul li的学习
DIV+CSS里,我们用得最多的就是ul li来显示数据,如新闻按钮等. <div id="menu"> <ul> <li><a href ...
- Android 常用数据适配器ArrayAdapter
接着上篇文章<Android 采用Layout Inflater创建一个View对象>,本文采用常用数据适配器ArrayAdapter 新建项目后,在layout文件夹下新建list_it ...
- block 页面传值小结
我以自己项目中的一个模块为例,首先有两个页面,第一个页面为显示城市页面,第二个页面为选择要使用block传的值(城市名). 第一个页面中的显示控件: //自定义左部定位视图 self.locView ...