【问题标题】:Waiting for long running ioctl on a non-blocking file descriptor在非阻塞文件描述符上等待长时间运行的 ioctl
【发布时间】:2018-08-05 07:36:32
【问题描述】:

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

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

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

【问题讨论】:

  • 据我所知,这样的机制是不存在的。我花了很长时间寻找一个。我即将设计和记录一个TIOCMNOTIFY 调用,该调用注册了以后通过poll() et.al 通知的兴趣。虽然我不知道如何将其争论到 Linux 内核中......:/

标签: c++ c linux serial-port


【解决方案1】:

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

catching signals while reading from pipe with select()

【讨论】:

  • 真的没有帮助,因为 ioctl 会生成什么信号?
猜你喜欢
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
相关资源
最近更新 更多