I O復用 select系統呼叫

2021-08-20 09:46:56 字數 1043 閱讀 4183

先上**(伺服器)

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請求 伺服器要同時監聽多個...