Linux中的字符设备驱动中有一个函数
unsigned int (*poll)(struct file * fp, struct poll_table_struct * table)
此函数在系统调用select内部被使用,作用是把当前的文件指针挂到设备内部定义的等待
队列中。这里的参数table可以不考虑,是在select函数实现过程中的一个内部变量。
函数具体实现时:
wait_queue_head_t t = ((struct mydev *)filp->private_data)->wait_queue;
poll_wait(filp, t, table);
return mask;
这里mask可以是:
POLLIN | POLLRDNORM
POLLOUT | POLLWRNORM
等等。
poll_wait的作用为:
在table中申请一个entry,而每个entry中有一个wait_queue_t,将此wait_queue_t挂入t的队列中,然后把filp也挂入这个entry。
这里filp就是在select函数的fdset中定义的。
然后在驱动程序的内部,如果有数据进入,就在程序中调用
wake_up_interruptible(&mydev->wait_queue);
unsigned int (*poll)(struct file * fp, struct poll_table_struct * table)
此函数在系统调用select内部被使用,作用是把当前的文件指针挂到设备内部定义的等待
队列中。这里的参数table可以不考虑,是在select函数实现过程中的一个内部变量。
函数具体实现时:
wait_queue_head_t t = ((struct mydev *)filp->private_data)->wait_queue;
poll_wait(filp, t, table);
return mask;
这里mask可以是:
POLLIN | POLLRDNORM
POLLOUT | POLLWRNORM
等等。
poll_wait的作用为:
在table中申请一个entry,而每个entry中有一个wait_queue_t,将此wait_queue_t挂入t的队列中,然后把filp也挂入这个entry。
这里filp就是在select函数的fdset中定义的。
然后在驱动程序的内部,如果有数据进入,就在程序中调用
wake_up_interruptible(&mydev->wait_queue);