C++ 等待在非阻塞文件描述符上长时间运行ioctl
以串行端口为例。串行端口可以使用C++ 等待在非阻塞文件描述符上长时间运行ioctl,c++,c,linux,serial-port,C++,C,Linux,Serial Port,以串行端口为例。串行端口可以使用TIOCMIWAIT调用ioctl,以等待信号更改。但是,如果串行端口以非阻塞方式打开,当CTS等信号线发生变化时,如何使用select、poll或epoll等方法中断事件循环?让我们假设串行端口也大量用于读写。生成另一个线程似乎不是一个好选择 在Windows上,OVERLAPPEDIO完美地解决了这个问题 我对上面列出的特定情况感兴趣,但也对如何编写需要将中断传递到用户空间的设备驱动程序感兴趣。我想您可能想看看如何使用pselect()。它与select()相
TIOCMIWAIT
调用ioctl
,以等待信号更改。但是,如果串行端口以非阻塞方式打开,当CTS等信号线发生变化时,如何使用select
、poll
或epoll
等方法中断事件循环?让我们假设串行端口也大量用于读写。生成另一个线程似乎不是一个好选择
在Windows上,OVERLAPPED
IO完美地解决了这个问题
我对上面列出的特定情况感兴趣,但也对如何编写需要将中断传递到用户空间的设备驱动程序感兴趣。我想您可能想看看如何使用pselect()。它与select()相同,但也允许您设置信号掩码。有关如何使用pselect的示例,请参见此处的顶部答案:
没有真正的帮助,因为ioctl将产生什么信号?据我所知,这样的机制并不存在。我花了相当长的时间寻找一个。我即将设计并记录一个
TIOCMNOTIFY
呼叫,该呼叫通过poll
()等注册兴趣,以备日后通知。虽然我不知道如何将其应用到Linux内核中…:/