三星2440按键驱动
static int s3c24xx_buttons_read(struct file *filp, char __user *buff, size_t count, loff_t *offp)
{
unsigned long err;
if (!ev_press) {
if (filp->f_flags & O_NONBLOCK)
return -EAGAIN;
else
wait_event_interruptible(button_waitq, ev_press);
}
/*将按键状态复制给用户,并清0*/
ev_press = 0;
err = copy_to_user(buff, (const void *)key_values, min(sizeof(key_values), count));
return err ? -EFAULT : min(sizeof(key_values), count);
}该段代码红色部分如何理解?是按键没有按下时,使所有等待进程都休眠是吗?if (filp->f_flags & O_NONBLOCK)
return -EAGAIN;如何理解?另外内核是如何知道等待进程的,为何是直接就调用睡眠函数?请教各位大侠 wait_event_interruptible?