Linux 2.0.32
July 12, 1997
manpages-zh
Chinese manual pages
man-pages-zh_tw
Traditional 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)