comport[port].opt.c_cc[VTIME] = 0;
comport[port].opt.c_cc[VMIN] = 0;
那么可能需要关注的是VMIN和VTIME这两个选项。
VMIN 最少读取字符数
VTIME 超时时间 (100ms最小单位)
这两个参数只有当设置为阻塞模式时才有效,有以下几种可能值:
1 VMIN> 0 && VTIME> 0
VMIN为最少读取的字符数,当读取到一个字符后,会启动一个定时器,在定时器超时事前,如果已经读取到了VMIN个字符,则read返回VMIN个字符。如果在接收到VMIN个字符之前,定时器已经超时,则read返回已读取到的字符,注意这个定时器会在每次读取到一个字符后重新启用,即重新开始计时,而且是读取到第一个字节后才启用,也就是说超时的情况下,至少读取到一个字节数据。
2 VMIN > 0 && VTIME== 0
在只有读取到VMIN个字符时,read才返回,可能造成read被永久阻塞。
3 VMIN == 0 && VTIME> 0
和第一种情况稍有不同,在接收到一个字节时或者定时器超时时,read返回。如果是超时这种情况,read返回值是0。
4 VMIN == 0 && VTIME== 0
这种情况下read总是立即就返回,即不会被阻塞。
from:http://blog.csdn.net/pengrui18/article/details/54929731