代码里有注释
R0代码:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/cdev.h>
#include <linux/types.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/netfilter_ipv4.h>
#include <linux/inet.h>
#include <linux/in.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <linux/udp.h>
#define SECOND_MAJOR 0
//用于显示IP
#define NIPQUAD(addr) \ ((unsigned char *)&addr)[0], \
((unsigned char *)&addr)[1], \
((unsigned char *)&addr)[2], \
((unsigned char *)&addr)[3]
//通信端口
static int second_major = SECOND_MAJOR;
//注册通信端口时用到的结构 保存端口信息
struct cdev g_cdev;
char *g_UserName = NULL;
char *g_PassWord = NULL;
char *g_Retstr = NULL;
int second_open(struct inode *inode, struct file *filp)
{
printk("Open!\n");
return 0;
}
int second_release(struct inode *inode, struct file *filp)
{
printk("Release!\n");
return 0;
}
static ssize_t second_read(struct file *filp, char __user *buf, size_t count,
loff_t *ppos)
{
int ret = 0;
//printk("Read!\n");
if(g_UserName && g_PassWord && g_Retstr)
{
if(*g_UserName == '\0' || *g_PassWord == '\0')
{
return 0;
}
strcpy(g_Retstr,"UserID:");
strcat(g_Retstr,g_UserName);
strcat(g_Retstr," PassWord:");
strcat(g_Retstr,g_PassWord);
//断数据可以用put_user 字符串或大数据使用copy_to_user
if (copy_to_user(buf,g_Retstr,256))
{
ret = -EFAULT;
}else
{
ret = 256;
}
memset(g_UserName,'\0',256);
memset(g_PassWord,'\0',256);
}
return ret;
}
//通信分发函数设置
static const struct file_operations second_fop