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

📄 rwbuf.c

📁 这学期的os课程设计的
💻 C
字号:
#include"rwbuf.h"
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/fs.h>
//#include<modversions>


//
//struct file_operations rwbuf_fops



static int inuse=0;
static int rwbuf_open(struct inode *inode, struct file *filep){
  if (inuse == 1) 
         return -1;
  inuse =1;
  
  MOD_INC_USE_COUNT; //?
  return 0;
}

static int rwbuf_close(struct inode *inode, struct file *filep){
   inuse =0;
   MOD_DEC_USE_COUNT;
   return 0; 
}

#define rwbuf_size 200
static char rwbuf[rwbuf_size];
static int rwlen =0;
 
static ssize_t rwbuf_write (struct file *filep, const char *buf, size_t count, loff_t *ppos){
       
     __generic_copy_from_user(rwbuf, buf,count);//?
     rwlen = count;
     return count;
}

static ssize_t rwbuf_read(struct file *filep, char *buf, size_t count, loff_t *ppos){
    __generic_copy_to_user(buf,rwbuf,count);
    return count;
}

static int rwbuf_ioctl( struct inode *inode, struct file *filep, unsigned int cmd, unsigned long arg){
     
    if( cmd == RWBUF_CLEAR){
         rwlen =0 ;
         printk("rwbuf in kernel zero-ed \n");     
     }
     return 0;
}

static struct file_operations
rwbuf_fops=
{
     open:      rwbuf_open,
     release:   rwbuf_close,
     read:      rwbuf_read,
     write:     rwbuf_write,
     ioctl:     rwbuf_ioctl,
 };

int init_module(){
   printk("Hello world\n");
   if (register_chrdev(RWBUF_MAJOR, RWBUF_NAME,&rwbuf_fops)){
    printk("register error\n");
    return -1;
  }
  printk("register ok\n");
  return 0;
}

void cleanup_module(){
    if (unregister_chrdev(RWBUF_MAJOR,RWBUF_NAME)!=0)
         printk("unreg err\n");
    else 
         printk("unreg ok\n");
   printk("bye\n");
}

⌨️ 快捷键说明

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