Linux 2.0.32
July 12, 1997
manpages-zh
Chinese manual pages
man-pages-zh-CN
Chinese Man Pages from Chinese Man Pages Project
man-pages-zh_cn
Simplified Chinese Linux man pages
manpages-dev
Manual pages about using GNU/Linux for development
man-pages
Linux kernel and C library user-space interface documentation
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 超出用户可访问的地址空间. |
兼容于
SVr4, SVID, AT&T, POSIX, X/OPEN, BSD 4.3
限制
在NFS文件系统中,读取小块数据仅更新时间标记,之后的调用 不再读取服务器端的数据.这是因为客户端把数据放在缓存里. 由于大多数情况下不存在NFS服务器向客户端的读操作, 所以NFS客户必须将更新时间标记的操作放在服务器端,而 数据可以放在客户端的缓存里留待以后更新.UNIX也可以禁用 客户端的缓存,但那样的话大多数情况下会导致服务器性能下降.
[中文版维护人]
byeyear <love_my_love >
[中文版最新更新]
2002.02.02
《中国linux论坛man手册页翻译计划》:
http://cmpp.linuxforum.net
跋
本页面中文版由中文 man 手册页计划提供。
中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh
中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh
REFERENCED BY
epoll_ctl(2), eventfd(2), fanotify_init(2), fcntl(2), getrandom(2), inotify_add_watch(2), ioctl_tty(2), open(2), perf_event_open(2), perfmonctl(2), pipe(2), prctl(2), pread(2), ptrace(2), readahead(2), readv(2), recv(2), seccomp(2), select(2), select_tut(2), sendfile(2), setpgid(2), signalfd(2), socket(2), socketpair(2), timerfd_create(2), userfaultfd(2), write(2), aio_error(3), aio_read(3), aio_return(3), dbopen(3), fgetc(3), fread(3), getline(3), gets(3tcl), mkfifo(3), mpool(3), readdir(3), rtime(3), stdin(3), stdio(3), termios(3), xdr(3), dsp56k(4), fuse(4), lirc(4), null(4), random(4), rtc(4), st(4), tty_ioctl(4), proc(5), aio(7), cpuset(7), epoll(7), fanotify(7), inotify(7), pipe(7), signal(7), socket(7), spufs(7), x25(7), inode(7), strace(1), xfs_io(8), xfsctl(3), atread(3), rmt-dump(8), hylafax-log(5), cpuset(4), firestring_estr_read(3), iv_fd_pump(3), libssh2_sftp_read(3), tar_append_file(3), tar_block_read(3), mknod(2), stat(2), grep(1), readv(3p), nfslogsum(8), telnet-probe(1), pv(1), since(1), tthsum(1), msocket(2viewos), pthread_cancel(3), rmt(1), hylafax-log(5f), rscsi(1), anysurrect-plugins(3), vsock(7), netsniff-ng(8), ermt(1), ast(3ast), libkeccak_generalised_sum_fd(3), libkeccak_keccaksum_fd(3), libkeccak_rawshakesum_fd(3), libkeccak_sha3sum_fd(3), libkeccak_shakesum_fd(3), fzopen(3), srmt(1), io_uring_enter(2), rmtclose(3), rmtioctl(3), rmtopen(3), rmtread(3), rmtseek(3), rmtwrite(3)