tag 标签: vtime

相关博文
  • 热度 24
    2012-10-18 14:31
    2254 次阅读|
    1 个评论
    3、VTIME 和  VMIN VTIME  定义要求等待的零到几百毫秒的值(通常是一个8位的unsigned char变量)。 VMIN 定义了要求等待的最小字节数, 这个字节数可能是0。 只有设置为阻塞时这两个参数才有效,仅针对于读操作。 说起来比较复杂,举个例子吧,设置为阻塞状态,写操作未进行实验,这里仅讨论读操作, read(fd,buf,8); // 读串口 3.1 options.c_cc = 0; options.c_cc = 0; VMIN = 0,当缓冲区字节数 = 0 时进行读操作,实际上这时读串口操作并未被阻塞,因为条件始终被满足。 3.2 options.c_cc = 0; options.c_cc = 1; VMIN = 1,当缓冲区字节数 = 1 时进行读操作,当没有数据时读串口操作被阻塞。 3.3 options.c_cc = 0; options.c_cc = 4; VMIN = 4,当缓冲区字节数 = 4 时进行读操作,否则读串口操作被阻塞。每次读出的最大字节数由read函数中第三个参数决定。直到缓冲区剩下的数据 read 第三个参数 并且 4 (如果这时read第三参数为 1 则进行4次读操作直至读完缓冲区,如read第三参数为2,连续进行读操作,直至缓冲区空或还剩一个字符)。没有设置VTIME,剩下的字符没有确定的期限,直到下次满足读条件的时候才被读出。 ----------------------------------考虑VTIME----------------------------- 3.4 options.c_cc = 10; //单位百毫秒 options.c_cc = 4; 同3.3的区别就是,没满足条件或读缓冲区中剩下的数据会在1秒(10百毫秒)后读出。另外特别注意的是当设置VTIME后,如果read第三个参数小于VMIN ,将会将VMIN 修改为read的第三个参数,即使用read(fd,buf,2);,以上设置变为: options.c_cc = 10; options.c_cc = 2;