多次读取由警报中断

时间:2016-04-27 22:38:56

标签: c serial-port

我在串口上设置了多个阻塞读取,并使用setitimer()进行超时。当我完成阅读(或超时到期并且read()返回EINT)时,我写了一条不同的消息,重新启动警报并再次开始阅读。但是,我现在已经解决了一个问题 - 当警报在两次读取之间到期时,我该怎么办?我现在想停下来,但我会去下一次阅读。 (设置一些标志只会将问题改为“如果报警在标志和读取之间到期,我该怎么办?”

1 个答案:

答案 0 :(得分:0)

有一种方法可以做你想说的事情,但这很难看。

  1. 创建一个管道。关闭它的写入结束。这会给你一个死的和无用的描述符(对于读取结束)。
  2. 获取串口的描述符,并dup保存副本。
  3. 在您的中断处理程序中,dup2串行端口描述符上的死描述符。这将确保下一个readwrite失败并且函数返回。
  4. 为了让事情恢复正常,dup2保存的串口描述符副本超过你杀死的那个。