函式說明: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...