1. 程式人生 > >c/c++ 學習-read 函式和 write 函式

c/c++ 學習-read 函式和 write 函式

 read 函式和 write 函式
最近開始從事搜尋引擎的工作,所以又重新開始了c/c++的旅程,時隔4年
不得不復習一下c/c++其中的內容,以下內容有網上別的朋友發表的,也有我自己總結的.
1. read
        #include 
        ssize_t read(int filedes, void *buf, size_t nbytes);

                  返回值:讀取到的位元組數;0(讀到 EOF);-1(出錯)
    read 函式從 filedes 指定的已開啟檔案中讀取 nbytes 位元組到 buf 中。以下幾種情況會導致讀取到的位元組數小於 nbytes :

    A. 讀取普通檔案時,讀到檔案末尾還不夠 nbytes 位元組。例如:如果檔案只有 30 位元組,而我們想讀取 100
位元組,那麼實際讀到的只有 30 位元組,read 函式返回 30 。此時再使用 read 函式作用於這個檔案會導致 read 返回 0 。
    B. 從終端裝置(terminal device)讀取時,一般情況下每次只能讀取一行。
    C. 從網路讀取時,網路快取可能導致讀取的位元組數小於 nbytes 位元組。
    D. 讀取 pipe 或者 FIFO 時,pipe 或 FIFO 裡的位元組數可能小於 nbytes 。
    E. 從面向記錄(record-oriented)的裝置讀取時,某些面向記錄的裝置(如磁帶)每次最多隻能返回一個記錄。

    F. 在讀取了部分資料時被訊號中斷。
讀操作始於 cfo 。在成功返回之前,cfo 增加,增量為實際讀取到的位元組數。
2. write
        #include 
        ssize_t write(int filedes, const void *buf, size_t nbytes);

                返回值:寫入檔案的位元組數(成功);-1(出錯)
write 函式向 filedes 中寫入 nbytes 位元組資料,資料來源為 buf 。返回值一般總是等於 nbytes,否則就是出錯了。常見的出錯原因是磁碟空間滿了或者超過了檔案大小限制。
    對於普通檔案,寫操作始於 cfo 。如果開啟檔案時使用了 O_APPEND,則每次寫操作都將資料寫入檔案末尾。成功寫入後,cfo 增加,增量為實際寫入的位元組數。

From : antigloss