select 函式詳解

2021-05-22 23:09:41 字數 1227 閱讀 1329

select函式:  

系統提供select函式來實現多路復用輸入/輸出模型。原型:  

#include  

#include  

select函式:  

系統提供select函式來實現多路復用輸入/輸出模型。原型:  

#include  

#include  

int   select(int   maxfd,fd_set   *rdset,fd_set   *wrset,fd_set   *exset,struct   timeval   *timeout);  

引數maxfd是需要監視的最大的檔案描述符值+1;rdset,wrset,exset分別對應於需要檢測的可讀檔案描述符的集合,可寫檔案描述符的集 合及異常檔案描述符的集合。struct   timeval結構用於描述一段時間長度,如果在這個時間內,需要監視的描述符沒有事件發生則函式返回,返回值為0。    

fd_zero,fd_set,fd_clr,fd_isset:           引數maxfd是需要監視的最大的檔案描述符值+1;rdset,wrset,exset分別對應於需要檢測的可讀檔案描述符的集合,可寫檔案描述符的集 合及異常檔案描述符的集合。struct   timeval結構用於描述一段時間長度,如果在這個時間內,需要監視的描述符沒有事件發生則函式返回,返回值為0。    

fd_zero,fd_set,fd_clr,fd_isset:  

fd_zero(fd_set   *fdset);將指定的檔案描述符集清空,在對檔案描述符集合進行設定前,必須對其進行初始化,如果不清空,由於在系統分配記憶體空間後,通常並不作清空處理,所以結果是不可知的。  

fd_set(fd_set   *fdset);用於在檔案描述符集合中增加乙個新的檔案描述符。  

fd_clr(fd_set   *fdset);用於在檔案描述符集合中刪除乙個檔案描述符。  

fd_isset(int   fd,fd_set   *fdset);用於測試指定的檔案描述符是否在該集合中。  

struct   timeval結構:  

struct   timeval  

timeout設定情況:  

null:select將一直被阻塞,直到某個檔案描述符上發生了事件。  

0:僅檢測描述符集合的狀態,然後立即返回,並不等待外部事件的發生。  

特定的時間值:如果在指定的時間段裡沒有事件發生,select將超時返回。

select函式詳解

select的機制中提供了乙個fd set的資料結構,實際上是long型別的陣列,每乙個陣列元素都能與一開啟的檔案控制代碼 不管是socket控制代碼,還是其他檔案或命名管道或裝置控制代碼 建立聯絡,建立聯絡的工作由程式設計師完成,當呼叫select 時,由核心根據io狀態修改fd set的內容,由...

select函式詳解

select 在socket程式設計中還是比較重要的,可是對於初學socket的人來說都不太愛用select寫程式,他們只是習慣寫諸如connect accept recv或recvfrom這樣的阻塞程式 所謂阻塞方式block,顧名思義,就是程序或是執行緒執行到這些函式時必須等待某個事件的發生,如...

select函式詳解

select函式允許程序指示核心等待多個事件中的任何乙個發生,並只在有乙個或多個事件發生或經歷一段指定時間後才喚醒它。通常我們呼叫select告知核心對哪些描述符 就讀 寫或異常條件 感興趣以及等待多長時間。不侷限於套接字,任何描述符都可以使用select來測試。當然,我們最熟悉的描述符是0 1 2...