了解 UNIX termios VMIN 和 VTIME
Understanding UNIX termios VMIN and VTIME
我目前正在基于 UNIX 的设备上开发一个简单的串行接口,无法找到以下问题的明确答案:
我目前正在尝试确定 'pure time read' (VMIN = 0, VTIME >0) 是否会 return 读到 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() 是否会 return,或者它是否会继续直到 'expectedMinNumBytes' 一旦收到第一个字节?
提前感谢您的帮助!
这是一篇纯定时阅读。如果有可用数据,则立即满足读取。如果没有数据,则在调用read时启动定时器,并且读取returns:要么是因为定时器超时(returns0)要么是一个字节可用。
我目前正在基于 UNIX 的设备上开发一个简单的串行接口,无法找到以下问题的明确答案:
我目前正在尝试确定 'pure time read' (VMIN = 0, VTIME >0) 是否会 return 读到 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() 是否会 return,或者它是否会继续直到 'expectedMinNumBytes' 一旦收到第一个字节?
提前感谢您的帮助!
这是一篇纯定时阅读。如果有可用数据,则立即满足读取。如果没有数据,则在调用read时启动定时器,并且读取returns:要么是因为定时器超时(returns0)要么是一个字节可用。