read 函數和 write 函數

1. read

        #include <unistd.h>

        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 <unistd.h>

        ssize_t write(int filedes, const void *buf, size_t nbytes);
 
                返回值:寫入文件的字節數(成功);-1(出錯)

write 函數向 filedes 中寫入 nbytes 字節數據,數據來源爲 buf 。返回值一般總是等於 nbytes,否則就是出錯了。常見的出錯原因是磁盤空間滿了或者超過了文件大小限制。

    對於普通文件,寫操作始於 cfo 。如果打開文件時使用了 O_APPEND,則每次寫操作都將數據寫入文件末尾。成功寫入後,cfo 增加,增量爲實際寫入的字節數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章