/*
 *    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示例的更多相关文章

  1. 背水一战 Windows 10 (17) - 动画: ThemeTransition(过渡效果)

    [源码下载] 背水一战 Windows 10 (17) - 动画: ThemeTransition(过渡效果) 作者:webabcd 介绍背水一战 Windows 10 之 动画 ThemeTrans ...

  2. 发现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 ...

  3. Windows 8.1 正式版微软官方原版镜像下载(新增10/17新版下载)

    中文版:中国区OEM预装版本,特定国家版,锁定语言,其它功能和核心版没有区别.简体中文单语言版:锁定语言,其它功能和核心版没有区别.专业版+核心版[零售版][推荐]:镜像内包含专业版(Professi ...

  4. Dell Technology Summit(2018.10.17)

    时间:2018.10.17地点:北京国家会议中心

  5. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  6. 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_ ...

  7. 2020.10.17 JZOJ 提高B组T2 导弹拦截

    2020.10.17 JZOJ 提高B组T2 导弹拦截 题目 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统. 敌国的导弹形成了立体打击,每个导弹可以抽象成一个三维空间中的 ...

  8. Lucene 4.10.2开发示例

    这里面用的是比较新的Lucene4.10.2 做的一个实例.(lucene的索引不能太大,要不然效率会很低.大于1G的时候就必须考虑分布索引的问题) 先介绍一下Lucene的几个参数意义: Index ...

  9. 10.17 linux 文件权限

    文件权限模拟练习 [root@wen ~]# groupadd incahome[root@wen ~]# usersdd oldboy -g incahome-bash: usersdd: comm ...

随机推荐

  1. 自己总结的web前端知识体系大全【欢迎补充】

    1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的 ...

  2. 一款开源且功能强大的C#甘特图控件.NET Winforms Gantt Chart Control

    甘特图在项目管理中非常重要,甘特图的思想比较简单,即以图示的方式通过活动列表和时间刻度形象地表示出任何特定项目的活动顺序与持续时间.它直观地表明任务计划在什么时候进行,及实际进展与计划要求的对比.管理 ...

  3. 经典!HTML5 Canvas 模拟可撕裂布料效果

    这是一个模拟可撕裂布料效果的 HTML5 Canvas 应用演示,效果逼真.你会看到,借助 Canvas 的强大绘图和动画功能,只需很少的代码就能实现让您屏息凝神的效果. 温馨提示:为保证最佳的效果, ...

  4. NavigationBar隐藏后,返回时表现不完美

    是这样的,app首页头部可能要自定义,所以选择把NavigationBar隐藏,所以在viewWillAppear时这样写: self.navigationController?.setNavigat ...

  5. UINavigationController和UIScrollView一起使用时导致UIScrollView位置偏移

    iOS7之后,当UIViewController成为UINavigationController的控制视图,UIViewController的控制视图上的第一个子视图是UIScrollView,UIS ...

  6. bootstrap的一些资源

    http://www.cnblogs.com/landeanfen/p/5461849.html 总结了时间,加载,自动增加图片选择,等bootstap控件 http://www.cnblogs.co ...

  7. Android 短信验证码平台

    1.容联云通讯 (目前只支持国内.收费) http://www.yuntongxun.com/ 2.bmob (目前只支持国内.收费) http://www.bmob.cn/ 3.阿里大鱼(目前只支持 ...

  8. 解决Dialog 消失,输入法不消失的问题

    前言:今天遇到一个奇怪的问题,Activity 里面弹出一个 dialog , 这个dialog里面有EditText . 问题:当 dialog 里面的输入法出现的时候,此时让diolog 消失,输 ...

  9. java 实现https请求

    java 实现https请求 JSSE是一个SSL和TLS的纯Java实现,通过JSSE可以很容易地编程实现对HTTPS站点的访问.但是,如果该站点的证书未经权威机构的验证,JSSE将拒绝信任该证书从 ...

  10. Android Studio no debuggable applications解决方案

    android studio 默认是没有开启debuggable 功能的,在tools里打开该功能即可,Tools->Android->Enable ADB Integration. 刚设 ...