日期:2014-05-16  浏览次数:20721 次

请教一个linux read阻塞的问题
1.当没有数据的时候,read是会阻塞的(我设置了nonblock也试了一遍,还是阻塞在那,返回不了)?
2.如何设置一个timeout,在规定的时间内如果读取不到数据的话就会返回

不吝赐教,谢谢

------解决方案--------------------
1. 楼主代码怎么写的?
我是这样写的,标准输入变成非阻塞OK。
        flag = fcntl(0, F_GETFL, 0);
        flag 
------解决方案--------------------
= O_NONBLOCK;
        if (fcntl(0, F_SETFL, flag) < 0) {      /* fgets no-block now */
                perror("Set stdin to non-block fails.");
                exit(1);
        }
2. 用select监视你read的fd。
------解决方案--------------------
引用:
Quote: 引用:

1. 楼主代码怎么写的?
我是这样写的,标准输入变成非阻塞OK。
        flag = fcntl(0, F_GETFL, 0);
        flag 
------解决方案--------------------
= O_NONBLOCK;
        if (fcntl(0, F_SETFL, flag) < 0) {      /* fgets no-block now */
                perror("Set stdin to non-block fails.");
                exit(1);
        }
2. 用select监视你read的fd。


请教下, 我老是是2种一起用,还不能完全搞清楚2个函数在监听阻塞函数的时候到底有什么实质性不同?
求大神赐教

select监听判断这个文件现在是否可读写,这样再操作就不会出现阻塞了,也不用考虑会出现阻塞的情况,立即返回。