【问题标题】:I/O Handling with sigaction()使用 sigaction() 处理 I/O
【发布时间】:2016-02-22 07:08:25
【问题描述】:

我需要编写一个能够在串口和can总线端口上读写的驱动程序。

串行端口是通过sigaction() 和事件处理程序实现的。当我尝试为 can 总线实现同样的事情时,只会通知最后一个事件处理程序,因为可能只是分配给 sigaction() 的事件句柄。

有没有其他办法可以解决这个问题?

【问题讨论】:

  • 您必须将信号处理程序中的所有函数调用限制为异步信号安全函数。阅读 POSIX 规范 here 和 Linux 手册页 here 每个页面都包含一个异步信号安全函数调用列表,这些函数调用可以安全地从信号处理程序中进行。 Linux 列表可能与 POSIX 标准列表不同 - 我没有仔细比较两者。

标签: c linux io serial-port can-bus


【解决方案1】:

您的信号处理程序需要确定发出信号的原因并采取适当的行动。您可能想要使用 sigprocmask() 阻止更多信号,因为您可能会在信号处理程序中被中断,检查串行端口和 CAN 总线上是否有任何数据可用,将其复制出来或设置您需要的任何标志到,然后在信号处理程序结束时取消阻塞信号。

【讨论】:

    猜你喜欢
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2013-09-16
    • 2020-09-20
    • 2021-04-26
    • 2013-06-03
    • 2016-07-15
    相关资源
    最近更新 更多