select用途:在一段時間內,監聽使用者感興趣的檔案描述符上的可讀可寫和異常等時間。
對於select函式的介面:
int select(int nfds,fd_set* readfds,fd_set* writefds,fd_set* exceptfds,struct timeval* timeout);
nfds表示監聽的檔案描述符總數,他是監聽的最大值加1,目的是為了節省時間
後面三個引數是可讀可寫和異常,最後乙個引數是等待時間,如果給timeout變數的成員都傳遞0那麼就立即返回,null就無限等待,若是乙個struct timeval結構體,那麼時間間就自己進行設定,具體的後續操作可以通過返回值來判定。
fd_set是乙個結構體,最多監聽1024個,這是select的預設最大。
關於select的返回值,如果超時切沒有任何描述符就緒,那麼返回0,如果失敗則返回-1,如果成功那麼就返回就緒檔案描述符的總數,如果在等待期間接收到了訊號那就返回-1。
select對於接收帶外資料也普通資料 都可使得select返回,但是select處於不同的就緒狀態,前者可讀,後者異常。
關於select監聽其他的程序給自己傳送資訊的**如下:
#include
#include
#include
#include
#include
#include
#include
int main()
if(fd_isset(c,&rdset))
;int ret = recv(c,buff,127,0);
if(ret <= 0)//如果客戶端關閉,返回0直接退出
printf("%s",buff);}}
close(c);
close(sockfd);
return 0;
}相應的客戶端**:
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char *argv)
;fgets(buff,128,stdin);//fgets會用到空格回車
if(strncmp(buff,"end",3)==0)
send(sockfd,buff,strlen(buff),0);//把收到的訊息再傳送出去
memset(buff,0,128);
}close(sockfd);//關閉
return 0;
}個人總結,如果有不對的歡迎指正
Select歸納總結
include include int select int maxfdpl,fd set readset,fd set write,fd set exceptset,const struct timeval timeout 返回值 該函式的返回值表示跨所有描述符集的已就緒的總位數。如果在任何描述符...
select函式總結
阻塞方式block,就是程序或是執行緒執行到這些函式時必須等待某個事件的發生,如果事件沒有發生,程序或執行緒就被阻塞,函式不能立即返回。使用select就可以完成非阻塞non block,就是程序或執行緒執行此函式時不必非要等待事件的發生,一旦執行肯定返回,以返回值的不同來反映函式的執 況,如果事件...
epoll 相對於select的優勢
分類 linuxknowhow 819 0 舉報 收藏這個問題至今才去查,是因為我需要用的地方真的不是很多,學習了那麼多年,不知道自己究竟學了什麼,覺得自己的優勢就是針對特定知識點都熟悉點,一整套的軟體架構沒有搞過。再總結一點select的不足點 select 最不能忍受的是乙個程序所開啟的fd是有...