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内核中…:/