Provided by: manpages-zh_1.5.2-1.1_all bug

NAME

       read - 在文件描述符上执行读操作

概述

       #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也可以禁用 客户
       端的缓存,但那样的话大多数情况下会导致服务器性能下降.

参见

       close(2),  fcntl(2),  ioctl(2),  lseek(2),  readdir(2),  readlink(2), select(2), write(2),
       fread(3)

[中文版维护人]

       byeyear <love_my_love@263.net >

[中文版最新更新]

       2002.02.02

《中国linux论坛man手册页翻译计划》:

       http://cmpp.linuxforum.net