1、select函式
#include
intselect
(int maxfd
, fd_set* readset, fd_set* writeset, fd_set* exceptset
,const
struct timeval* timeout)
;
說明:
作用:將多個檔案描述符集中到一起監視。
2、使用
fd_set型別物件的賦值方式:
fd_zero
(fd_set* fdset): 將fd_set變數的所有位初始化為0。
fd_set(int fd, fd_set* fdset):在引數fd_set指向的變數中註冊檔案描述符fd的資訊。
fd_clr
(int fd, fd_set* fdset):引數fd_set指向的變數中清除檔案描述符fd的資訊。
fd_isset
(int fd, fd_set* fdset):若引數fd_set指向的變數中包含檔案描述符fd的資訊,則返回真。
3、示例#include
#include
#include
#include
#define buf_size 30
intmain
(int argc,
char
const
*ar**)
else
if(result ==0)
// 監聽描述符事件超時
else}}
return0;
}
select實現I O復用
select 系統提供select函式來實現多路復用輸入 輸出模型。select系統呼叫是用來讓我們的程式監視多個檔案控制代碼的狀態變化的。程式會停在select這裡等待,直到被監視的檔案控制代碼有乙個或 多個發生了狀態改變。關於檔案控制代碼,其實就是乙個整數,我們最熟悉的控制代碼是0 1 2三 個...
I O復用 select 學習
最近在學習網路程式設計,覺得select這塊的知識點確實比較難以理解,在學習socket網路通訊機制時,只是習慣寫諸如connect accept recv或recvfrom這樣的阻塞程式,所謂阻塞方式block,顧名思義,就是程序或是執行緒執行到這些函式時必須等待某個事件的發生,如果事件沒有發生,...
I O復用 select和poll函式 一
我們看到上面的tcp客戶同時處理兩個輸入 標準輸入和tcp套接字。我們遇到的問題就是在客戶阻塞於 標準輸入上的 fgets呼叫期間,伺服器程序會被殺死。伺服器tcp雖然正確地給客戶tcp傳送乙個fin,但是既然客戶程序阻塞於從標準輸入讀入的過程,它將看不到這個rof,知道從套接字讀時為止 可能已經過...