如果read()讀到資料為0,那麼就表示檔案讀完了,如果在讀的過程中遇到了中斷則read()應該返回-1,同時置errno為eintr。
因此判斷read的條件如下:
if <=0
if(<0 && errno==eintr)
else
}
如果 write()返回0,那麼就表示出錯,也就是無法寫入了;而如果在寫的過程中遇到了中斷,那麼write()會返回-1,同時置errno為eintr。
因此判斷write的條件如下:
if<=0
if ==0
break;
}
ssize_t readn ( int fd, void *vptr, size_t n )
else if(nread = =0)
break;
nleft-=nread;
ptr+=nread;
}return ( n-nleft ); }
ssize_t writen ( int fd, const void *ptr, size_t n )
nleft-=nwritten;
ptr+=nwritten;
}return (n);
}
寫函式write
ssize_t write(int fd,const void *buf,size_t nbytes)
write函式將buf中的nbytes位元組內容寫入檔案描述符fd。成功時返回寫的位元組數,失敗時返回-1,並設定errno變數。
在網路程式中,當我們向套接字檔案描述符寫時有倆種可能:
1) write的返回值大於0,表示寫了部分或者是全部的資料;
2) 返回的值小於0,此時出現了錯誤,我們要根據錯誤型別來處理。
如果錯誤為eintr表示在寫的時候出現了中斷錯誤。如果為epipe表示網路連線出現了問題(對方已經關閉了連線)。
讀函式read
ssize_t read(int fd,void *buf,size_t nbyte)
read函式是負責從fd中讀取內容。當讀成功時,read返回實際所讀的位元組數。如果返回的值是0,表示已經讀到檔案的結束了。小於0表示出現了錯誤。如果錯誤為eintr說明讀是由中斷引起的,如果是econnrest表示網路連線出了問題。
關於C 的小結
對於c 的學習,似乎遇到了寫瓶頸,總結如下,希望能夠找出乙個清晰的前進的道路 對於語言本身的學習,在於對庫的了解,對於語言本身所含的邏輯的了解,而這些理解是建立在對物理結構有很好的理解的基礎上的。1 關於c 的邏輯其實是物件導向思想,其中也涉及一套方法,ood,oop,關於這些方法可以使通過對uml...
關於多型的小結
什麼是多型?多型按照字面的意思就是 多種狀態 的意思。在c 中多型有著更廣泛的含義。下面著重介紹c 語言中關於多型的一些知識點。c 中多型分為靜態多型和動態多型。靜態多型通過函式過載和泛型程式設計實現。動態多型通過虛函式來實現。參照下圖 靜態多型 編譯器在編譯期間完成的,編譯器根據函式實參的型別 可...
關於DNS的小結
小明在瀏覽器中輸入,瀏覽器會先在os中查詢dns快取,如果找到了則瀏覽器就能從本地立刻得到該網域名稱所對應的ip位址 103.235.46.39 有了該ip位址瀏覽器才能訪問該 如果本地快取中找不到該網域名稱所對應的ip,瀏覽器會進一步詢問解析伺服器.一般情況下,解析伺服器就是你的isp。如果解析伺...