先上**(伺服器)
ser.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define max 1024
int main()
fds[0]=listenfd; //第乙個放listenfd,之後的全放c
while(1)}}
int n=select(maxfd+1,&reads,null,null,null);//引數:最遠檢測到哪(不會超過1024;2可讀,3可寫,4異常事件描述符集合;5超時時間)
// printf("select\n");
if(n==0) //若超時時間內沒有任何檔案描述就位,select返回0
else
if(n==-1) //失敗返回-1
else }}
else
//為檔案描述符c,接收資料並傳送ok
;int num=recv(fds[i],buff,127,0);
if(num<=0)
printf("%d:%s\n",fds[i],buff);
send(fds[i],"ok",2,0);}}
}}
}}
select能同時監聽多個檔案描述符上的可讀、可寫、異常三類事件
只能關注這3類事件;
所能監聽的檔案描述符的數量1024(0——1023);
每次呼叫前,都必須重複傳入描述符事件集;
每次都會將所有檔案描述符返回,必須迴圈檢測哪些就緒,哪些未就緒;
採用輪詢方式監聽檔案描述符;
會存在兩次拷貝過程:第一次呼叫時,從使用者空間拷貝到核心;第二次返回,從核心拷貝到使用者空間;
IO復用 select系統呼叫
1 select函式 此函式用於在一段時間內,監聽使用者感興趣的檔案描述符上的可讀 可寫和異常等事件。includeint select int nfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout f...
I O多路復用之select系統呼叫
i o多路復用模型允許我們同時等待多個套接字描述符是否就緒。linux系統為實現i o多路復用提供的最常見的乙個函式是select函式,該函式允許程序指示核心等待多個事件中的任何乙個發生,並只有在乙個或多個事件發生或經歷一段指定的時間後才喚醒它。作為乙個例子,我們可以呼叫select,告知核心僅在下...
I O復用的方式之一select系統呼叫
來自 linux高效能伺服器程式設計 i o復用是用來解決監聽多個描述符上是否有就緒事件的系統呼叫。具體包含以下幾種情況 客戶端程式同時處理多個監聽套接字socket 客戶端要同時處理使用者輸入和網路連線 tcp伺服器要同時處理多個描述符 伺服器要同時處理tcp請求和udp請求 伺服器要同時監聽多個...