请教一个linux read阻塞的问题

seuduck 2013-05-24 02:05:13
1.当没有数据的时候,read是会阻塞的(我设置了nonblock也试了一遍,还是阻塞在那,返回不了)?
2.如何设置一个timeout,在规定的时间内如果读取不到数据的话就会返回

不吝赐教,谢谢
...全文
510 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
我鲁班无敌 2013-08-29
  • 打赏
  • 举报
回复
引用 4 楼 max_min_ 的回复:
[quote=引用 1 楼 lishanchao 的回复:] 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个函数在监听阻塞函数的时候到底有什么实质性不同? 求大神赐教[/quote] select监听判断这个文件现在是否可读写,这样再操作就不会出现阻塞了,也不用考虑会出现阻塞的情况,立即返回。
布鲁克斯南南 2013-05-31
  • 打赏
  • 举报
回复
引用 5 楼 qq120848369 的回复:
要么用select,要么用SO_RCVTIMEO
++1
max_min_ 2013-05-25
  • 打赏
  • 举报
回复
引用 1 楼 lishanchao 的回复:
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个函数在监听阻塞函数的时候到底有什么实质性不同? 求大神赐教
yong_f 2013-05-25
  • 打赏
  • 举报
回复
引用 1 楼 lishanchao 的回复:
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。
我常用第一种。 第一种马上返回。
qq120848369 2013-05-25
  • 打赏
  • 举报
回复
要么用select,要么用SO_RCVTIMEO
空的 2013-05-24
  • 打赏
  • 举报
回复
signal(SIGALRM, timeout_handle); alarm(20); read alarm(0)
沭水河畔 2013-05-24
  • 打赏
  • 举报
回复
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。
Re: 《Linux 系统常用内置命令》  ---------------------------------------内容提要:     01. Linux内置命令概述;两栖命令 echo pwd kill 等等    02. 判断内置命令的方式;help -d [command] 能够正常回显    03. 内置命令在 shell 脚本中的基础应用介绍    04. 内置命令 alias 和 unalias 自定义别名和删除别名;临时生效与永久生效    05. 后台前台 出将入相 腾腾转 任务相关命令 bg fg jobs    06. SHELL 循环的处理方式 break continue exit    07. 常见 builtin 内置命令 eval exit export history    08. 内置命令 read 交互式赋值变量;type 判断命令类型    09. 内置命令 ulimit 修改系统资源使用限制;unset 清空变量  本人在教学和实战过程中发现,即便是有一定运维经验的人,可能已经能够搭建一定复杂度的Linux架构,但是在来来回回的具体操作中,还是体现出CLI(命令界面)功底不够扎实,甚至操作的非常‘拙’、处处露‘怯’。 对一个士兵来说,枪就是他的武器,对于一个程序员来说,各种library(工具库)就是他的武器;而对于Linux运维人员来说,无疑命令行工具CLI(命令界面)就是他们的武器;高手和小白之间的差距往往就体现在对于这些“武器”的掌握和熟练程度上。有时候一个参数就能够解决的事情,小白们可能要写一个复杂的Shell脚本才能搞定,这就是对CLI(命令界面)没有理解参悟透彻导致。 研磨每一个命令就是擦拭手中的作战武器,平时不保养不理解,等到作战的时候,一定不能够将手中的武器发挥到最好,所以我们要平心、静气和专注,甘坐冷板凳一段时间,才能练就一身非凡的内功! 本教程从实战出发,结合当下流行或最新的Linux(v6/7/8 版本)同时演示,将命令行结合到解决企业实战问题中来,体现出教学注重实战的务实精神,希望从事或未来从事运维的同学,能够认真仔细的学完Linux核心命令的整套课程。 本课程系列将逐步推出,看看我教学的进度和您学习的步伐,孰占鳌头! 注:关于教学环境搭建,可以参考本人其它课程系列,本教学中就不再赘述!  《参透 VMware 桌面级虚拟化》 《在虚拟机中安装模版机(包括应用软件等)》 《SecureCRT 连接 GNS3/Linux 的安全精密工具》

18,773

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧