先悔过一下。因为一个月前就在学习这个,当时解决的差不多了,想着抽个空再记录这些,没想到这么短的时间就已经忘得
差不多了,真是不好,应该趁热打铁。废话不多说了,这里主要介绍在Linux下,利用信号来实现异步的串口中断响应。主要思路
很简单,首先是关联信号,在此是关联处理SIGPOLL;其次是等待指定的信号。
异步I/O的实现有很多方式,【2】中提了几种,还有较新的epoll,和Poll本质上差不多。但本人当时尚不理解这些,没有明
白select、Poll等的具体做法,也采用了多线程。其实万万不该,由于逻辑处理的不好而导致的程序不可预测性太多,因此不太
同意【2】中的观点,只是用来参考使用了。但我这里讲的做法也是在多线程条件下的异步串口通信。
Linux下信号的概念、原理以及初步的应用【1】中的上、下已经讲解得非常到位了,仔细读读都能找到自己所需要的。下面
具体记录我的实现过程。
(1)关联信号。
首先是利用sigaction函数来将指定的信号与处理函数关联,以及通过fcntl函数确定是在哪个线程中,关联哪个设备文件。
那么先是sigaction函数的原型:int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);
其中struct sigaction 中的内容意义可以看【3】,
struct sigaction sact;
sigemptyset(&sact.sa_mask); //一般都先清空关注的信号集