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...