Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1066989
  • 博文数量: 252
  • 博客积分: 4561
  • 博客等级: 上校
  • 技术积分: 2833
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-15 08:23
文章分类

全部博文(252)

文章存档

2015年(2)

2014年(1)

2013年(1)

2012年(16)

2011年(42)

2010年(67)

2009年(87)

2008年(36)

分类:

2010-10-11 10:17:54

#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/net.h>
#include <net/sock.h>
#include <linux/in.h>
#include <linux/types.h>
#include <linux/kthread.h>
#include <linux/wait.h>
#include <linux/skbuff.h>
#include <linux/string.h>
#include <linux/sysctl.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
#include <asm/checksum.h>
#include <linux/ip.h>
#include <linux/workqueue.h>
#include <linux/jiffies.h>
#include <net/net_namespace.h>
#include <net/route.h>
#include <linux/route.h>
#include <linux/stddef.h>
#include <linux/mutex.h>
#include <linux/inet.h>
#include <linux/time.h>
#include <linux/vmalloc.h>
#include <linux/jhash.h>
#include <linux/seq_file.h>
#include <linux/tcp.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/if.h>
#include <net/ip.h>
#include <net/tcp.h>
#include <asm/bitops.h>

#define err(msg) printk(KERN_ERR "%s failed.\n", msg)

struct temp
{
    int command;
    char str[10];
    int append;
};

static ssize_t atest_read(struct file *filp, char __user *ubuff, size_t ulen, loff_t *pos)
{
    return -EPERM;
}

static ssize_t atest_write(struct file *filp, const char __user *ubuff, size_t ulen, loff_t *pos)
{
    struct temp t;

    memset(&t, '\0', sizeof(struct temp));
    memcpy(&t, ubuff, sizeof(struct temp));
    printk(KERN_INFO "t.command     = %d\n", t.command);
    printk(KERN_INFO "t.str        = %s\n", t.str);
    printk(KERN_INFO "t.append    = %d\n", t.append);
    
    return ulen;
}

static struct file_operations fops =
{
    .owner    = THIS_MODULE,
    .read    = atest_read,
    .write    = atest_write,
};

int __init maininit(void)
{
    proc_net_fops_create(&init_net, "atest", 0600, &fops);
    return 0;
}

void __exit mainexit(void)
{
    proc_net_remove(&init_net, "atest");
}

module_init(maininit);
module_exit(mainexit);
MODULE_LICENSE("GPL");


阅读(646) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-11 10:23:06

#include #include #include #include #include #define err(msg) perror(msg) struct temp { int command; char str[10]; int append; }; int main(void) { struct temp t; int fd; if ((fd = open("/proc/net/atest", O_WRONLY)) == -1) { err("open"); goto out; } memset(&t, '\0', sizeof(struct temp)); t.command = 1237; strncpy(t.str, "abcdefg", sizeof(t.str) - 1); t.append = 7879; if (write(fd, &t, sizeof