select機制的原理


應用程序中最廣泛用到的是 BSD UNIX 中引入的 select()系統調用,其原型如下

int select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,struct timeval *timeout);

  其中 readfdswritefdsexceptfds 分別是被 select()監視的讀、寫和異常處理的文件描述符集合,numfds 的值是需要檢查的號碼最高的文件描述符加 1timeout 參數是
一個指向 struct timeval 類型的指針,它可以使 select()在等待 timeout 時間后若沒有文件描述符准備好則返回 
timeval 結構體定義

struct timeval
{
    int tv_sec; /* 秒 */
    int tv_usec; /* 微妙 */
};
下列操作用來設置、清除、判斷文件描述符集合。
FD_ZERO(fd_set *set)
清除一個文件描述符集。
FD_SET(int fd,fd_set *set)
將一個文件描述符加入文件描述符集中。
FD_CLR(int fd,fd_set *set)
將一個文件描述符從文件描述符集中清除。
FD_ISSET(int fd,fd_set *set)
判斷文件描述符是否被置位

由於調用select的時候,每個驅動的poll函數接口都會被調用到,實際上執行select的進程被掛到了每個驅動的等待隊列上。可以被任何一個驅動喚醒  




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM