關於errno EINTR的小結

2021-07-09 05:42:21 字數 1220 閱讀 6547

如果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。如果解析伺...