【原创】Linux系统Poll和select操作
0赞学过linux的同学都知道,Poll和select操作非常重要,今天就简单写写这方面的内容。
poll和select操作:
其中readfds、writefds、exceptfds分别是被select()监视的读、写和异常处理的文件描述符集合,numfds的值是需要检查的号码最高的文件描述符加1。timeout参数是一个指向struct timeval类型的指针,它可以使select()在等待timeout时间后若没有文件描述符准备好则返回。
poll()函数典型模板
static unsigned int xxx_poll(struct file *filp, poll_table *wait)
{
unsigned int mask = 0;
struct xxx_dev *dev = filp->private_data; /*获得设备结构体指针*/
...
poll_wait(filp, &dev->r_wait, wait);//加读等待队列头
poll_wait(filp, &dev->w_wait, wait);//加写等待队列头
if (...)//可读
{
mask |= POLLIN | POLLRDNORM; /*标示数据可获得*/
}
if (...)//可写
{
mask |= POLLOUT | POLLWRNORM; /*标示数据可写入*/
}
...
return mask;
}
这方面的相关内容大家最好能实际运行操作一下,印象会更深。