c++ - 在非阻塞文件描述符上等待长时间运行的 ioctl

标签 c++ c linux serial-port

拿一个串口。串行端口可以调用带有TIOCMIWAITioctl 来等待信号变化。但是,如果串行端口以非阻塞方式打开,如何使用 selectpollepoll 之类的东西来中断事件-当像CTS这样的信号线改变时循环?让我们假设串行端口也大量用于读写。产生另一个线程似乎是一个糟糕的选择。

在Windows上,OVERLAPPED IO完美解决了这个问题。

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

最佳答案

我想您可能想看看使用 pselect()。它与 select() 相同,但它还允许您设置信号掩码。可以在此处的最佳答案中找到有关如何使用 pselect 的示例:

catching signals while reading from pipe with select()

关于c++ - 在非阻塞文件描述符上等待长时间运行的 ioctl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51692366/

相关文章:

c++ - Xcode 4.5 和 OpenMP with Clang (Apple LLVM) 仅使用一个内核

c++ - 我是否必须实现所有 4 个运算符重载才能处理所有 const 和非常量组合?

c++ - 使用unsigned char类型的1字节控制变量从0迭代到200

c - 如何实现以下算法以在 c 中对动态数组进行排序?

linux - 如何在 Windows Server 2016 上配置 Service Fabric 群集以便能够运行 Linux 容器?

linux - mkimage 中未提供 arm64 支持

c++ - 从 C 到 C++ 的转换避免 <strsafe.h>

c++ - 如何编写可在 C++ 程序中使用的 C 头文件?

c - sprintf 在 C 中添加特殊字符

linux - 使用 Curl 抓取多个页面