在无阻塞文件描述符上等待长时间运行的ioctl

时间:2018-08-05 07:36:33

标签: c++ c linux serial-port

获取一个串行端口。串行端口可以用ioctl调用TIOCMIWAIT以等待信号改变。但是,如果串行端口以非阻塞方式打开,那么当CTS之类的信号线发生变化时,如何使用selectpollepoll之类的东西打破事件循环?假设串行端口也大量用于读写。生成另一个线程似乎是一个错误的选择。

在Windows上,OVERLAPPED IO可以完美解决此问题。

我对上面列出的特定情况感兴趣,而且对如何编写需要将中断传递给用户空间的设备驱动程序感兴趣。

1 个答案:

答案 0 :(得分:0)

我认为您可能希望使用pselect()进行研究。与select()相同,但是它还允许您设置信号掩码。有关如何使用pselect的示例,请参见此处的顶部答案:

catching signals while reading from pipe with select()