Provided by: manpages-zh_1.6.3.6-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

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh