拿一个串口。串行端口可以调用带有TIOCMIWAIT
的ioctl
来等待信号变化。但是,如果串行端口以非阻塞方式打开,如何使用 select
、poll
或 epoll
之类的东西来中断事件-当像CTS这样的信号线改变时循环?让我们假设串行端口也大量用于读写。产生另一个线程似乎是一个糟糕的选择。
在Windows上,OVERLAPPED
IO完美解决了这个问题。
我对上面列出的具体情况感兴趣,但也对如何编写需要将中断传递给用户空间的设备驱动程序感兴趣。
最佳答案
我想您可能想看看使用 pselect()。它与 select() 相同,但它还允许您设置信号掩码。可以在此处的最佳答案中找到有关如何使用 pselect 的示例:
关于c++ - 在非阻塞文件描述符上等待长时间运行的 ioctl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51692366/