原理
想要在一个应用程序里同时监测多个硬件的数据,就需要使用IO多路复用模型实现,IO多路复用可以通过select()/poll()/epoll()机制来实现。如果监测的多个硬件的数据都没有准备好,此时进程进入休眠,当有一个或者多个硬件数据准备好了,进程被唤醒,当进程被唤醒后从内核读取准备好的描述符的集合,然后再集合中取出准备好的文件描述符,将硬件的数据读走
思想
创建一个文件描述符的集合
将要监测的事件描述符添加到集合
等待事件发生
对发生事件的描述符进行读取
__poll_t mycdev_poll(struct file* file, struct poll_table_struct* wait)
{
// 1.定义返回值的变量
__poll_t mask = 0;
// 2.调用poll_wait,向上提交等待队列头,构造等待队列
poll_wait(file, &wq, wait);
// 3.如果数据准备好置位mask
if (condition) {
mask |= EPOLLIN; // EPOLLIN 数据可读 EPOLLOUT数据可写
}
// 4.返回mask
return mask;
}
本文介绍了如何在应用程序中利用IO多路复用技术,如poll()函数,实现对多个硬件设备数据的高效监测。通过创建文件描述符集合、添加事件描述符、等待事件并处理数据,展示了poll_tmycdev_poll函数的工作原理和关键步骤。
814

被折叠的 条评论
为什么被折叠?



