码迷,mamicode.com
首页 > 其他好文 > 详细

read的返回值结论(针对于普通文件描述符和管道或socket文件描述符情况划分)

时间:2017-11-01 20:29:03      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:取数   adf   最大   参数   关闭   文件   返回值   函数参数   error   

关于read函数的返回值分析:

情况一:(读取普通文件而言)

01.阻塞情况

read函数从打开的设备或文件中读取数据。

read/write  (read和write函数会读取\n换行)

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);

函数参数:

n  fd:文件描述符

n  buf:读上来的数据保存在缓冲区buf中

n  count:buf缓冲区存放的最大字节数

函数返回值:

n  >0:读取的字节数

n  =0:文件读取完毕 (对于文件而言,无论文件描述符是阻塞还是非阻塞,如果文件读取结束那么返回值都是零!)

n  -1: 出错,并设置errno

errno的错误代码

EINTR 此调用被信号所中断。

EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK == 非阻塞),若无数据可读取则返回此值。

EBADF 参数fd 非有效的文件描述词,或该文件已关闭。

 

情况二:(读pipe或者socket的缓冲区的数据,socket的缓冲区和pipe的缓冲区默认read都是阻塞的!!)

缓冲区的文件描述符是阻塞fd的情况:

n  >0:读取的字节数

n  =0:对端关闭,read读取的返回值是0,相当于读到文件结尾,(如果缓冲区没有被修改为非阻塞,那么缓冲区没有数据read函数会阻塞等待有数据再进行读取!)

n  -1: 出错,并设置errno(如果缓冲区的文件描述符被修改为非阻塞fd的时候,返回值如果是-1,同时 error是EAGAIN,表示缓冲区为空无数据可读取。)

read的返回值结论(针对于普通文件描述符和管道或socket文件描述符情况划分)

标签:取数   adf   最大   参数   关闭   文件   返回值   函数参数   error   

原文地址:http://www.cnblogs.com/DLL137578736/p/7768093.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!