select系統呼叫:
select系統呼叫的功能是:在一段時間裡監聽使用者感興趣的檔案描述符上的可讀,可寫
,異常等事件。
這是linux上的select系統呼叫的原型:
各個引數說明:
nfds指定被監聽的檔案描述符的總數,它通常被設定為最大的檔案描述符的值加一,因為檔案描述符是從
0開始的。
readfds,
writefds
,exceptionfds
,分別指向可讀,可寫,異常事件對應的檔案描述符集合,應用程式呼叫
select
時,通過這三個引數傳入自己感興趣的檔案描述符。
select
返回時,核心將修改它們來通知應用程式哪些些檔案描述符已經就緒。這三個引數的結構如下:
可以看到,這個結構體只包含了乙個長度為32
整形陣列,共
1024
個位,每一位表示乙個檔案描述符。
timeout表示超超時時間,
struct timespec ;
由此可見,select
為我們提供了乙個微秒級的定時時間。
如果tv_sec
和tv_usec都為0
,則select
立即返回,如果,
timeout
為空,則
select
一直阻塞,知道某個檔案描述符就緒。
select成功時返回就緒的檔案描述符的個數,如果在超時時間沒有就緒的檔案描述符,則
select返回0
,失敗時返回
-1並設定
errno
。如果在
select
等待期間,程序接收到訊號,則
select
立即返回
-1,並設定
errno
為eintr
。//未完待續。
Linux下I O復用模型
以下內容引述至 linux unix系統程式設計手冊 常見的程式使用的i o模型都是單個程序每次只在乙個檔案描述符上執行i o操作,每次i o系統呼叫會阻塞直到完成資料傳輸。對於許多應用來說,傳統的阻塞式i o模型已經足夠了,但這不代表所有的應用都能得到滿足。非阻塞式i o可以讓我們周期性地檢查 輪...
Linux下的i o復用 select
1 i o復用 乙個程序或者乙個執行緒能夠同時對多個檔案描述符 socket 提供服務,伺服器上的程序或執行緒如何將多個檔案描述符統一監聽,當任意乙個檔案描述符上有事件發生,其都能及時處理。2 select函式 啟動監聽 int select int nfds,fd set readfds fd s...
Linux下的i o復用 poll
1 i o復用 乙個程序或者乙個執行緒能夠同時對多個檔案描述符 socket 提供服務,伺服器上的程序或執行緒如何將多個檔案描述符統一監聽,當任意乙個檔案描述符上有事件發生,其都能及時處理。2 poll 函式 函式原型 int poll struct pollfd fds,int nfds,int ...