other languages
other sections
READ(2) | Linux Programmer's Manual | READ(2) |
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手冊頁翻譯計劃》:¶
跋¶
本頁面中文版由中文 man 手冊頁計劃提供。中文 man 手冊頁計劃:../../man-pages-zh/manpages-zh
July 12, 1997 | Linux 2.0.32 |