驱动中POLL函数的实现方法:
static unsigned int key_dev_poll(
struct file *file,
struct poll_table_struct *wait)
{
unsigned int mask = 0;
poll_wait(file, &key_dev->wq, wait);
if (key_dev->head!=key_dev->tail)//the resource are available!!!
mask |= POLLIN | POLLRDNORM;//mark the file can be read!
return mask;
}
static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p)
{
if (p && wait_address)
p->qproc(filp, wait_address, p);
}
/* These are specified by iBCS2 */
#define POLLIN 0x0001 //can read!
#define POLLPRI 0x0002
#define POLLOUT 0x0004//can write!
#define POLLERR 0x0008
#define POLLHUP 0x0010
#define POLLNVAL 0x0020
/* The rest seem to be more-or-less nonstandard. Check them! */
#define POLLRDNORM 0x0040 //??
#define POLLRDBAND 0x0080
#define POLLWRNORM 0x0100
#define POLLWRBAND 0x0200
#define POLLMSG 0x0400
#define POLLREMOVE 0x1000
struct pollfd {
int fd;
short events;
short revents;
};