我正在编写代码,通过linux中的串口与另一台设备进行通信
即使0个字符到达,我希望非阻塞超时 . termios结构允许您设置VTIME和VMIN,但如果VMIN大于0,并且如果返回0个字符,则读取调用将永远阻止... WTF,为什么 . 这似乎不包括其他设备在短时间内停机的情况,现在我的应用程序在读取呼叫时被阻止 . 这似乎是一种忽视的批判行为 . 我真的不想实现自己的超时 .
Write command
Read block timeout of around .3s(if 0 characters, still wait max of .3s)
2 回答
看看
select
. 它等待数据准备好读取(但实际上没有读取任何内容) . 来自man page:代码看起来像:
如果希望
read
在超时后没有数据返回,则可以设置MIN == 0
和TIME > 0
. 来自tcsetattr(3)
:此模式可用于构建更高级别的通信功能,无论如何必须实现这些功能以处理部分读取(即,如果另一端在"packet"中间崩溃),错误的数据包,拆分数据包等等 . 这就是简单的
read
无法为你做的所有事情 .