了解UNIX termios VMIN和VTIME

时间:2015-10-22 15:45:04

标签: unix termios

我目前正在基于UNIX的设备上开发一个简单的串行接口,但无法找到以下内容的明确答案:

我目前正在尝试确定'纯时间读取'(VMIN = 0,VTIME> 0)是否会在读取到n_bytes的一半时间返回,因为定时器在调用read时启动,而不是在第一个字符时收到了。

例如,如果我向串口的另一端的设备发送消息并且我想要响应,我会尝试以下(伪代码):

m_tty.c_cc[VMIN] = 0;
m_tty.c_cc[VTIME] = 5;                              //i.e. > 0

write(myFileHandle, myData, sizeof(myData));
usleep(sizeof(myData) * 100);                      //assuming 100 us per char to Tx.
read(myFileHandle, myRxData, expectedMinNumBytes);

我不清楚read()是否会在计时器即将到期时第一个字节到达时返回,还是在收到第一个字节后它是否会继续直到'expectedMinNumBytes'?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这是一个纯粹的定时阅读。如果有可用数据,则立即满足读取。如果没有数据,则在调用read时启动定时器,并且读取返回:因为定时器到期(返回0)或单个字节可用。