【发布时间】:2015-10-22 15:45:04
【问题描述】:
我目前正在基于 UNIX 的设备上开发一个简单的串行接口,但无法找到以下问题的明确答案:
我目前正在尝试确定“纯时间读取”(VMIN = 0, VTIME >0) 是否会在读取到 n_bytes 的过程中返回,因为计时器是在调用读取时启动的,而不是在第一个字符是收到了。
例如,如果我向串行接口另一端的设备发送消息并且我想要响应,我会尝试以下操作(伪代码):
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'?
提前感谢您的帮助!
【问题讨论】:
-
"... 如果收到第一个后它会一直持续到 'expectedMinNumBytes'?" -- 这个问题没有意义,因为您已将 VMIN 指定为 0。第一个字节已经使接收到的计数超过最小值!
-
关于 VMIN 和 VTIME 的精彩文章:Understanding UNIX termios VMIN and VTIME