#include
intselect(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);
返回:做好準備的檔案描述符的個數。超時為0,錯誤為-1。
struct timeval
有以下三種情況:
1.timeout == null 等待無限長的時間。等待可以被乙個訊號中斷。
2.timeout->tv_sec == 0 &&timeout->tv_usec == 0不等待,直接返回。
3.timeout->tv_sec !=0 ||timeout->tv_usec!= 0 等待指定的時間。
中間的三個引數readset, writset, exceptset,指向描述符集。乙個檔案描述集儲存在 fd_set 型別中。fd_set型別變數每一位代表了乙個描述符。我們也可以認為它只是乙個由很多二進位制位構成的陣列。
fd_set型別的變數,我們可以做的就是宣告乙個變數,為變數賦乙個同種型別變數的值,或者使用以下幾個巨集來控制它:
#include
int fd_zero(int fd, fd_set *fdset);
int fd_clr(int fd, fd_set *fdset);
int fd_set(int fd, fd_set *fd_set);
int fd_isset(int fd, fd_set *fdset);
fd_zero巨集將乙個 fd_set型別變數的所有位都設為 0。
fd_set將變數的某個位置位。
fd_clr清除某個位時。
fd_isset測試某個位是否被置位。
當宣告了乙個檔案描述符集後,必須用fd_zero將所有位置零。之後將我們所感興趣的描述符所對應的位置位,操作如下:
fd_set rset;
int fd;
fd_zero(&rset);
fd_set(fd, &rset);
fd_set(stdin, &rset);
select返回後,用fd_isset測試給定位是否置位:
if(fd_isset(fd, &rset)
1.intmaxfdp是乙個整數值,是指集合中所有檔案描述符的範圍,即所有檔案描述符的最大值加1,不能錯。
2.fd_set*readfds是指向fd_set結構的指標,這個集合中應該包括檔案描述符,我們是要監視這些檔案描述符的讀變化的,即我們關心是否可以從這些檔案中讀取資料了。可以傳入null值,表示不關心任何檔案的讀變化。
1)這個集合中有乙個檔案可讀,select就會返回乙個大於0的值。
2)沒有可讀的檔案,若超出timeout的時間,select返回0,發生錯誤返回負值。
3.fd_set*writefds是指向fd_set結構的指標,這個集合中應該包括檔案描述符,我們是要監視這些檔案描述符的寫變化的,即我們關心是否可以向這些檔案中寫入資料了,可以傳入null值,表示不關心任何檔案的寫變化。
1)這個集合中有乙個檔案可寫,select就會返回乙個大於0的值。
2))沒有可寫的檔案,超出timeout的時間,select返回0,若發生錯誤返回負值。
4.fd_set*errorfds同上面兩個引數的意圖,用來監視檔案錯誤異常檔案。
5.structtimeval* timeout是select的超時時間,它可以使select處於三種狀態。
第一,若將null以形參傳入,即不傳入時間結構,就是將select置於阻塞狀態,一定等到監視檔案描述符集合中某個檔案描述符發生變化為止;
第二,若將時間值設為0秒0毫秒,就變成乙個純粹的非阻塞函式,不管檔案描述符是否有變化,都立刻返回繼續執行,檔案無變化返回0,有變化返回乙個正值;
第三,timeout的值大於0,這就是等待的超時時間,即 select在timeout時間內阻塞,超時時間之內有事件到來就返回了,否則在超時後不管怎樣一定返回,返回值同上述。
學習筆記 select函式
select原型 int select int nfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout select函式可以使用各種套接字巨集來控制io。fd clr int fd,fd set set ...
SQL學習筆記 基本select
複習 學習,溫故而知新。基本select 1 空值 null 未定義值 不確定的值 不是零也不是空格。空值不能夠直接參與四則運算。2 別名中特殊字元需要加雙引號 select sal 12 as ann sal from emp 特殊字元 空格 select sal 12 asann salfrom...
select和pselect學習筆記
select pselect用於同步i o多路復用。select pselect允許程式同時監聽多個fd,直到其中乙個或多個fd上有對應的i o操作就緒時,或超時時才返回。fd set for select and pselect.typedef struct fd set fd set採用bits...