概述
#include <unistd.h>

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

描述
read() 从文件描述符 fd 中读取 count 字节的数据并放入从 buf 开始的缓冲区中.
如果 count 为零,read()返回0,不执行其他任何操作. 如果 count 大于SSIZE_MAX,那么结果将不可预料.

返回值
成功时返回读取到的字节数(为零表示读到文件描述符), 此返回值受文件剩余字节数限制.当返回值小于指定的字节数时并不意味着错误;这可能是因为当前可读取的字节数小于指定的字节数(比如已经接近文件结尾,或者正在从管道或者终端读取数据,或者 read()被信号中断). 发生错误时返回-1,并置 errno 为相应值.在这种情况下无法得知文件偏移位置是否有变化.
错误代码
EINTR
在读取到数据以前调用被信号所中断.
EAGAIN
使用 O_NONBLOCK 标志指定了非阻塞式输入输出,但当前没有数据可读.
EIO
输入输出错误.可能是正处于后台进程组进程试图读取其控制终端,但读操作无效,或者被信号SIGTTIN所阻塞, 或者其进程组是孤儿进程组.也可能执行的是读磁盘或者磁带机这样的底层输入输出错误.
EISDIR
fd 指向一个目录.
EBADF
fd 不是一个合法的文件描述符,或者不是为读操作而打开.
EINVAL
fd 所连接的对象不可读.
EFAULT
buf 超出用户可访问的地址空间.
也可能发生其他错误,具体情况和 fd 所连接的对象有关. POSIX 允许 read 在读取了一定量的数据后被信号所中断,并返回 -1(且 errno 被设置为EINTR),或者返回已读取的数据量.

兼容于
SVr4, SVID, AT&T, POSIX, X/OPEN, BSD 4.3
限制
在NFS文件系统中,读取小块数据仅更新时间标记,之后的调用不再读取服务器端的数据.这是因为客户端把数据放在缓存里. 由于大多数情况下不存在NFS服务器向客户端的读操作, 所以NFS客户必须将更新时间标记的操作放在服务器端,而数据可以放在客户端的缓存里留待以后更新.UNIX也可以禁用客户端的缓存,但那样的话大多数情况下会导致服务器性能下降.

最新文章

  1. android adb 命令详解
  2. 数论 - Moon Game
  3. iOS音乐播放器相关
  4. Java_cookie 和session 的区别详解
  5. 实现虚拟模式的动态数据加载Windows窗体DataGridView控件 .net 4.5 (一)
  6. SharePoint 2013 - REST API about Content
  7. HDU 4644 BWT(Burrows–Wheeler transform+KMP)
  8. Linux VPS 基本命令
  9. javascript数学计算
  10. MySQL 对于大表(千万级),要怎么优化呢?
  11. 算法系列——huffman编码
  12. np.percentile获取中位数、百分位数
  13. 洛谷P3085 [USACO13OPEN]阴和阳Yin and Yang(点分治,树上差分)
  14. [Unity插件]Lua行为树(七):行为树嵌套
  15. sql语句中having的作用是?
  16. 在 Core Data 中存取 transformable 类型的数据
  17. 74. Search a 2D Matrix(二分查找,剑指offer 1)
  18. ASP.NET控件--DropDownList
  19. Windows 域用户
  20. Python numpy有什么用?

热门文章

  1. CSS3 结构性伪类选择器(1)
  2. thinkphp url和路由
  3. 【java】Split函数踩坑记
  4. 循环神经网络(LSTM和GRU)(2)
  5. C#第一个程序Helloworld
  6. java 将MySql数据库中的数据(某一列)取出放入数组中 转
  7. I/O等待事件-db file scattered read
  8. Windows 环境下vue+webpack前端开发环境搭建
  9. 不缓存JS
  10. Linux 两台服务器之间传递文件