【Linux设备驱动程序(第三版)】----设备文件的访问控制:独享设备
complete.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/fs.h>//file_operations, file
#include <linux/completion.h>
#include <asm/uaccess.h>//copy_to_user & copy_from_user
MODULE_LICENSE("Dual BSD/GPL");
#define MEMSIZE 100
int complete_major = 250;
DECLARE_COMPLETION(comp);
unsigned char s[MEMSIZE];
static atomic_t scull_s_available = ATOMIC_INIT(1);
ssize_t complete_read(struct file *filp, char __user *buf, size_t size, loff_t *pos)
{
#if 0
unsigned long p = *pos;
unsigned int count = size;
int ret = 0;
if(p >= MEMSIZE)
return 0;
if(count > MEMSIZE - p)
count = MEMSIZE -p;
wait_for_completion(&comp);
if(copy_to_user(buf, (void*)(