社区
非技术区
帖子详情
Linux下read阻塞读一个空文件,返回什么
天才2012
2012-12-06 03:06:42
如何是阻塞那是不是等待着,
如果是文件尾,那是不是返回0;
实验表明是立即返回0.没有阻塞
...全文
225
1
打赏
收藏
Linux下read阻塞读一个空文件,返回什么
如何是阻塞那是不是等待着, 如果是文件尾,那是不是返回0; 实验表明是立即返回0.没有阻塞
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kitten1
2014-01-01
打赏
举报
回复
取决于你返回什么! 你是在写故事吗? return 你想要的;
Linux
阻塞
与非
阻塞
读
取
文件
阻塞
与非
阻塞
读
常规
文件
是不会
阻塞
的,不管
读
多少字节,
read
一定会在有限的时间内
返回
。从终端设备或网络
读
则不一定,如果从终端输入的数据没有换行符,调用
read
读
终端设备就会
阻塞
,如果网络上没有接收到数据包,调用
read
从网络
读
就会
阻塞
,至于会
阻塞
多长时间也是不确定的,如果一直没有数据到达就一直
阻塞
在那里。同样,写常规
文件
是不会
阻塞
的,而向终端设备或网络写则不一定。 现在明确一下
阻塞
(Block)这个概念。 当进程调用
一个
阻塞
的系统函数时,该进程被置于睡眠(Sleep)状态,这时内核调度其它进程运行,直到该
Linux
中
read
()和wirte()函数的深度描述
以
read
为例,如果设备暂时没有数据可
读
就
返回
-1,同时置errno为EWOULDBLOCK(或者EAGAIN,这两个宏定义的值相同),表示本来应该
阻塞
在这里(would block,虚拟语气),事实上并没有
阻塞
而是直接
返回
错误,调用者应该试着再
读
一次(again)。,如果从终端输入的数据没有换行符,调用
read
读
终端设备就会
阻塞
,如果网络上没有接收到数据包,调用
read
从网络
读
就会
阻塞
,至于会
阻塞
多长时间也是不确定的,如果一直没有数据到达就一直
阻塞
在那里。
read
函数从打开的设备或
文件
中
读
取数据。
linux
socket
read
阻塞
read
函数只是
一个
通用的
读
文件
设备的接口。是否
阻塞
需要由设备的属性和设定所决定。一般来说,
读
字符终端、网络的socket描述字,管道
文件
等,这些
文件
的缺省
read
都是
阻塞
的方式。如果是
读
磁盘上的
文件
,一般不会是
阻塞
方式的。但使用锁和fcntl设置取消
文件
O_NOBLOCK状态,也会产生
阻塞
的
read
效果。 怎么样以非
阻塞
的方式从管道中
读
取数据?因为我用
read
函数时,如果管道没有数据就会
阻塞
住
linux
下的
阻塞
和非
阻塞
#include <unistd.h> #include <fcntl.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char buf[10]; int fd, n; fd = open("/dev/tty", O_RDONLY|O_NONBLOCK); if (fd &l.
Linux
网络编程-8、
read
()函数
返回
值-1具体分析:1被(信号等)中断2以非
阻塞
方式
读
但没数据3真的出错了
【代码】
Linux
网络编程-8、
read
()函数
返回
值-1具体分析:1被(信号等)中断2以非
阻塞
方式
读
但没数据3真的出错了。
非技术区
1,068
社区成员
6,263
社区内容
发帖
与我相关
我的任务
非技术区
硬件/嵌入开发 非技术区
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 非技术区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章