免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2673 | 回复: 9
打印 上一主题 下一主题

求助:终端属性VTIME设置了好像没有效果 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-26 09:44 |只看该作者 |倒序浏览
我使用tcgetattr和tcsetattr设置了 VTIME值,然后调用read()函数,好像没有效果,没有发生超时会从read() 这边退出,
而是一直阻塞在read()函数这

测试代码如下:
#include<stdio.h>
#include<termios.h>
#include<unistd.h>

int main(int argc,char*argv[])
{
        struct termios mode ,savemode;
        tcgetattr(0,&mode);
        savemode=mode;


        mode.c_lflag &=~ICANON;
        mode.c_cc[VTIME]=20;
        mode.c_cc[VMIN]=3;

        tcsetattr(0,TCSANOW,&mode);

        char szBuf[1024]={0};

        read(0,szBuf,1024);

        printf("%s\n",szBuf);

        tcsetattr(0,TCSANOW,&savemode);
        return 0;
}

论坛徽章:
0
2 [报告]
发表于 2010-02-26 13:11 |只看该作者
顶一下

论坛徽章:
0
3 [报告]
发表于 2010-02-26 14:52 |只看该作者
有可能我也遇到这个问题了{:3_183:}{:3_183:}{:3_183:}{:3_183:}

论坛徽章:
0
4 [报告]
发表于 2010-02-27 11:21 |只看该作者
有哪位大虾知道原因不,顶一下

论坛徽章:
0
5 [报告]
发表于 2010-02-27 14:21 |只看该作者

论坛徽章:
0
6 [报告]
发表于 2010-03-01 08:58 |只看该作者
没有人知道吗?

论坛徽章:
0
7 [报告]
发表于 2010-03-03 10:48 |只看该作者
{:3_182:}

论坛徽章:
0
8 [报告]
发表于 2010-03-11 10:37 |只看该作者

论坛徽章:
0
9 [报告]
发表于 2010-12-06 16:15 |只看该作者
要用fcntl函數設置read未非阻塞方式吧!:wink:

论坛徽章:
0
10 [报告]
发表于 2010-12-06 16:25 |只看该作者
樓主,我知道了,是這樣的:
VTIME指定了等待的时间,VMIN指定了读取字符的最小数量。
它们不同组合地取值会得到不同的结果,分别如下:
1.当VTIME>0,VMIN>0时。read调用将保持阻塞直到读取到第一个字符,读到了第一个字符之后开始计时,此后若时间到了VTIME或者时间未到但已读够了VMIN个字符则会返回;若在时间未到之前又读到了一个字符(但此时读到的总数仍不够VMIN)则计时重新开始。
2. 当VTIME>0,VMIN=0时。read调用读到数据则立即返回,否则将为每个字符最多等待VTIME时间。
3. 当VTIME=0,VMIN>0时。read调用一直阻塞,直到读到VMIN个字符后立即返回。
4. 若在open或fcntl设置了O_NDELALY或O_NONBLOCK标志,read调用不会阻塞而是立即返回,那么VTIME和VMIN就没有意义,效果等同于与把VTIME和VMIN都设为了0。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP