IO多路复用在内核上的实现

本文介绍了如何在应用程序中利用IO多路复用技术,如poll()函数,实现对多个硬件设备数据的高效监测。通过创建文件描述符集合、添加事件描述符、等待事件并处理数据,展示了poll_tmycdev_poll函数的工作原理和关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理

想要在一个应用程序里同时监测多个硬件的数据,就需要使用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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值