⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mydev.c

📁 在Linux下实现文件的拷贝
💻 C
字号:
#ifndef __KERNEL__#define __KERNEL__ #endif#ifndef MODULE#define MODULE     #endif#include </home/zhangjian/ostask/linux-2.6.18/include/asm/module.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/kernel.h>#include <asm/uaccess.h>#define CHAR_MAJOR_NUM 300	char msgbuf[256];static int test_major= 0;static int dev_open(struct inode *, struct file *);static int dev_release(struct inode *, struct file *);static ssize_t dev_read(struct file *, char *, size_t, loff_t *);static ssize_t dev_write(struct file *, const char *, size_t, loff_t *);struct file_operations dev_fops ={	 open: dev_open,	 release: dev_release,  	 read: dev_read,    write: dev_write,};static int dev_init(){  	int result;      	result=register_chrdev(CHAR_MAJOR_NUM, "mydev", &dev_fops);        	if (result<0){		printk("mydev register failure!");return result;}    if(result==0){		printk("mydev register success!");test_major=result;}	return 0;}static void dev_exit(){       	unregister_chrdev(CHAR_MAJOR_NUM, "mydev");}static int dev_open(struct inode *node, struct file *f){                                    	return 0;}static ssize_t dev_release(struct inode *node, struct file *f){               	return 0;}static ssize_t dev_read(struct file *f, char *buf, size_t len, loff_t *off){      	int i;   for(i=0;i<len;i++)            {      if(__put_user(msgbuf[i],buf++))        return -EFAULT;      }   return len;}static ssize_t dev_write(struct file *f, const char *buf,size_t len, loff_t *off){   int i;   unsigned char uc;   printk("Data below is from user.\n");   for(i=0;i<len;i++)     {      if(!get_user(msgbuf[i],buf++))        printk("%02x",uc);    }   return len;   }module_init(dev_init);module_exit(dev_exit);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -