繁体   English   中英

Linux上的串行端口通讯-为什么使用SIGIO处理程序不好?

[英]Serial port comms on Linux - why is using SIGIO handler bad?

在工作中,有人要求我在Linux上使用C ++为工业硬件实现新的控制器应用程序。 一个关键功能是在使用Modbus的设备之间使用无线电调制解调器通信。 我可以将数据读写到ttyS0串行端口上,但是我正在使用SIGIO信号的信号处理程序来告诉主控制循环,数据何时到达端口上进行读取。 时序至关重要,因为该协议将传输结束定义为我需要检测的3.5个字符长度。 我在网上看到,使用SIGIO处理程序不是达到此目的的好主意(包括在stackoverflow上对此的答案)。 谁能告诉我为什么不赞成这种方法? 我的偏好是使用poll()select()在新线程上运行传入消息监视,但是我的老板很热衷于信号处理程序方法,但是我们都是Linux新手,所以将不胜感激地接受任何解释。

信号处理程序增加了很多复杂性,并增加了与可重入和原子性有关的错误的风险。 您可以在此处查看讨论文章: http : //www.ibm.com/developerworks/linux/library/l-reent/index.html

听起来您没有充分的理由在用例中使用信号处理程序。 如果您的信号处理程序只是要发信号通知另一个线程进行读取,为什么不使用阻塞读取或从另一个线程中进行选择呢?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM