第二章 檔案I 0 函式read write

2021-10-09 18:28:44 字數 1574 閱讀 1498

函式說明:write()會把引數buf所指的記憶體寫入count個位元組到引數放到所指的檔案內。write成功返回,只是buf中的資料被複製到了kernel中的tcp傳送緩衝區。

#includessize_t write (int fd, const void * buf, size_t count);
返回值:如果順利write()會返回實際寫入的位元組數。當有錯誤發生時則返回-1,錯誤**存入errno中。

附加說明:

1、write()函式返回值一般無0,只有當如下情況發生時才會返回0:write(fp, p1+len, (strlen(p1)-len)中第三引數為0,此時write()什麼也不做,只返回0。

2、write()函式從buf寫資料到fd中時,若buf中資料無法一次性讀完,那麼第二次讀buf中資料時,其讀位置指標(也就是第二個引數buf)不會自動移動,需要程式設計師程式設計控制,而不是簡單的將buf首位址填入第二引數即可。如可按如下格式實現讀位置移動:write(fp, p1+len, (strlen(p1)-len)。 這樣write第二次迴圈時變會從p1+len處寫資料到fp, 之後的也由此類推,直至(strlen(p1)-len變為0。

3、在write一次可以寫的最大資料範圍內(貌似是bufsiz ,8192),第三引數count大小最好為buf中資料的大小,以免出現錯誤。

應證了附加說明第一條

#include

#include

#include

#include

#include

intmain()

len +

= n;

}return0;

}

#includessize_t read(int fd, void * buf, size_t count);
read()會把引數fd所指的檔案傳送count 個位元組到buf 指標所指的記憶體中。

引數count是請求讀取的位元組數,讀上來的資料儲存在緩衝區buf中,同時檔案的當前讀寫位置向後移。注意這個讀寫位置和使用c標準i/o庫時的讀寫位置有可能不同,這個讀寫位置是記在核心中的,而使用c標準i/o庫時的讀寫位置是使用者空間i/o緩衝區中的位置。比如用fgetc讀乙個位元組,

fgetc有可能從核心中預讀1024個位元組到i/o緩衝區中,再返回第乙個位元組,這時該檔案在核心中記錄的讀寫位置是1024,而在file結構體中記錄的讀寫位置是1。注意返回值型別是ssize_t,表示有符號的size_t,這樣既可以返回正的位元組數、0(表示到達檔案末尾)也可以返回負值-1(表示出錯)

read函式返回時,返回值說明了buf中前多少個位元組是剛讀上來的。

#include

#include

#include

#include

#include

#define buffsize 4096

intmain()

while

((n=

read

(fd,buf,buffsize)

)>0)

return0;

}

第二章 函式

bool check int n 判斷是否為質數 int arr 15 15 為0 為1 int sum 號個數 int num 0 滿足題意的圖形數 int n int i,j void prin int n sum 0 for i 0 i n i for j 0 j n i j if arr i...

第二章 建構函式

default constructor的構造操作 什麼時候才會合成乙個default construct 當編譯器需要它的時候,此外,被合成出來的 construct 只執行編譯器所需要的行動。nontivial default constructor的 4種情況 1.帶有 default cons...

php第二章 檔案操作

讀取檔案 p fopen d apmserv5.2.6 www htdocs test.txt r 開啟檔案,呼叫失敗是返回 false 讀取檔案中資訊 while feof p fclose p 關閉檔案 2.寫檔案 p fopen d apmserv5.2.6 www htdocs test.t...