请教一个linux read阻塞的问题

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

不吝赐教,谢谢
...全文
541 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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。

18,829

社区成员

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

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