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 ...
随机推荐
- Jquery UI 和Easy UI常用插件
一.Jquery的插件简介 (一)什么是插件 插件(Plug-in)是一种遵循一定的应用程序接口规范编写出来的程序,是原有系统平台或应用软件平台功能的一种扩展和补充. 注意!!其只能在程序规定的系统平 ...
- 类似 Dribbble 下载按钮的 SVG 弹性动画进度条
Codrops 发布了一个如何创建一个基于弹性效果的 SVG 加载进度条教程,基于 SVG 和 TweenMax 实现.按钮开始的时候是一个带有箭头的图标,一旦它被点击,动画成一个有趣的小金属丝和一个 ...
- [deviceone开发]-do_Dialog的基本使用示例
一.简介 我们平常使用do_Notification的alert或者confirm都是比较简单弹窗. 更为复杂和个性化的弹窗需要用到do_Dialog, 它可以弹出一个自定义的窗口,窗口里的内容是你自 ...
- javascript 奇淫巧技44招
1.首次为变量赋值时务必使用var关键字 变量没有声明而直接赋值得话,默认会作为一个新的全局变量,要尽量避免使用全局变量. 2.使用===取代== ==和!=操作符会在需要的情况下自动转换数据类型.但 ...
- SharePoint 解决打开浏览器自动登录
SharePoint使用Windows身份验证,默认会弹出Windows验证登录框,如下图所示: 1.对于已经加域的客户端 IE安全设置,将站点加信任站点,然后修改信任站点安全设置, 滚动条拉到最后, ...
- 百度地图SDK 遇到的问题及解决方案
目前项目工作中用到了百度地图sdk,遇到了不少问题,在此记录一下,顺便吐槽下希望百度能把这地图sdk做的更好用一点. 1,开发环境, Xcode6.0 (6A313) + 百度地图 iOS SDK v ...
- phonegap创建的ios项目推送消息出现闪退现象
使用phonegap创建的ios项目,推送消息时,当程序在前台运行或者在后台运行状态下,推送消息过来,可以解析并且跳转: 但是在程序从后台退出的状态下,当消息推送过来的时候,点击通知栏,打开程序,程序 ...
- Android终止线程的方法
线程对象属于一次性消耗品,一般线程执行完run方法之后,线程就正常结束了,线程结束之后就报废了,不能再次start,只能新建一个线程对象.但有时run方法是永远不会结束的.例如在程序中使用线程进行So ...
- TCP连接状态与2MSL等待时间
1 连接状态图 2 建立连接:三次握手,不使用DNS和使用DNS 3 关闭连接-四次握手 连接双方任何一方调用close()后,连接的两个传输方向都关闭,不能再发送数据了.如果一方调用shutdown ...
- GCD的深入理解
GCD 深入理解(一) 本文由@nixzhu翻译至raywenderlich的<grand-central-dispatch-in-depth-part-1> 虽然 GCD 已经出现过一段 ...