socket程式設計中用到的慢速系統呼叫函式有:
accept
while(1)
}break;
}
read
返回值:
>0 ,read實際讀到的位元組數
=0,資料讀完(讀到檔案末尾、管道(寫端關閉,read返回0,好似讀到檔案末尾)、socket末尾(其中讀到socket末尾表示對端關閉))
問題:存不存在對端沒關閉,但是不向socket中寫資料的情況呢?
存在,此時read函式並不會返回0,而是會阻塞住。
-1,異常,通過errno排除正常的錯誤;
表示,過段時間應重新讀一下。
write
返回值同read.
因為是慢速,所以,在呼叫的過程中,存在被訊號中斷的可能性,所以,需要當函式返回-1出錯的時,需要通過errrono繼續進行判斷,如果是。。。等錯誤,可以忽略,應該繼續進行。
select:
<0 :出錯
=0:超時
>0 :有事件發生
struct timeval wwait;
wwait.tv_sec = 3
wwait.tv_usec = 0;
while(1)
printf("select error, info: %s!", strerror(errno));
return -1;
}else if(status == 0)
break;
}}
系統呼叫 函式呼叫
linux下對檔案操作有兩種方式 提供了庫函式,如open close read write ioctl 等,需包含標頭檔案unistd.h。以write 函式為例 其函式原型為size t write int fd,const void buf,size t nbytes 其操作物件為檔案控制代碼...
Socket 與系統呼叫深度分析
本次實驗主要從以下幾個方面對socket和系統呼叫之間的關係 socket api 和 系統呼叫關係 系統呼叫機制 socket相關系統呼叫核心函式和跟蹤驗證 系統呼叫一般發生在中斷的時候。當中斷發生時,系統就會進入核心態指向相關的系統呼叫。相信考過408的同學對下圖應該是很熟悉的。這個圖大概的描述...
Socket與系統呼叫深度分析
一 系統呼叫 由於需要限制不同的程式之間的訪問能力,防止他們獲取別的程式的記憶體資料,或者獲取外圍裝置的資料,併發送到網路,cpu劃分出兩個許可權等級 使用者態和核心態。核心態 cpu可以訪問記憶體的所有資料,包括外圍裝置,例如硬碟,網絡卡,cpu也可以將自己從乙個程式切換到另乙個程式。使用者態 只...