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);
clear–將檔案描述符從集合set中移除。
fd_isset(int fd, fd_set *set);
檢測fd是否在集合內,是 返回真。
fd_set(int fd, fd_set *set);
加入集合。
fd_zero(fd_set *set);
清理整個集合使其不含任何描述符。
select提供了乙個結構體:fd_set.
通常為乙個小於等於32位的描述符,由fd_setsize決定。
使用select函式的過程一般是:
先呼叫巨集fd_zero將指定的fd_set清零,然後呼叫巨集fd_set將需要測試的fd加入fd_set,接著呼叫函式select測試fd_set中的所有fd,最後用巨集fd_isset檢查某個fd在函式select呼叫後,相應位是否仍然為1。select return值:
-1 select error
0 select time out
1 success
timeout 使用的結構體
struct timeval ;
andstruct timespec ;
設定2.5秒
timeout.tv_sec = 2;
timeout.tv_usec = 500000;
linux c學習筆記 select函式詳解
select系統呼叫是用來讓我們的程式監視多個檔案控制代碼 file descriptor 的狀態變化的。程式會停在select這裡等待,直到被監視的檔案控制代碼有某乙個或多個發生了狀態改變。何為檔案控制代碼?檔案控制代碼在linux裡很多,如果你man某個函式,在函式返回值部分說到成功後有乙個檔案...
Select學習筆記
include intselect int maxfdp1,fd set readset,fd set writeset,fd set exceptset,struct timeval timeout 返回 做好準備的檔案描述符的個數。超時為0,錯誤為 1。struct timeval 有以下三種情...
套接字 學習筆記三 select函式
編寫linux應用程式時,經常會遇到需要檢查好幾個輸入狀態才能確定下一步行動的情況,這種情況可稱之為忙等待。在單使用者系統中執行乙個忙等待是可以接受的,它不停地掃瞄 輸入裝置看是否有資料,如果有資料到達才讀取它。這種做法很耗cpu時間。select函式 這裡函式又稱呼叫 系統呼叫 檢查乙個由多個檔案...