驱动支持select函数(二)

2014-11-24 01:04:16 · 作者: · 浏览: 15


}



if (down_interruptible(&sem))

{

return - ERESTARTSYS;

}



flag = 0;

if (copy_to_user(buf, &global_var, sizeof(int)))

{

up(&sem);

return - EFAULT;

}



up(&sem);



return sizeof(int);

}



static ssize_t globalvar_write(struct file *filp, const char *buf, size_t len, loff_t *off)

{

if (down_interruptible(&sem))

{

return - ERESTARTSYS;

}

if (copy_from_user(&global_var, buf, sizeof(int)))

{

up(&sem);

return - EFAULT;

}

up(&sem);

flag = 1;



wake_up_interruptible(&outq);



return sizeof(int);

}



static unsigned int globalvar_poll(struct file *filp, poll_table *wait)

{

unsigned int mask = 0;



poll_wait(filp, &outq, wait);



if(flag != 0)

{

mask |= POLLIN | POLLRDNORM;

}



return mask;

}

module_init(globalvar_init);

module_exit(globalvar_exit);