Linux的select函式例項

2021-08-28 22:57:18 字數 916 閱讀 1996

/*

函式說明:正常每隔一秒列印乙個數字,當有fd被設定時,就馬上執行操作。而不是被阻塞住

*/#include #include #include #include #include #include #include #include #define path "test.txt"

int t_select(void);

int main(void)

//非同步復用io處理

return 0;

}int t_select(void)

else if(n==0) //10s沒有fd設定

else //有fd被設定,變為非阻塞式

}return 0;

}

/*函式原型:

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

功能:select可以根據內部設定的多個fd,那個fd被設定就會去執行相關操作。可以起到非同步多路復用io的功能,提供函式執行效率。select本身是阻塞式的,直到收到有fd被設定才變為非阻塞式。

異常:如果在設定時間內,select沒有收到fd的返回值,則返回0,表示超時。正常返回最大fd+1的值,出錯則返回小於零的負數。

使用:結合這四個個巨集:fd_clr、fd_isset、fd_zero、fd_set。其中fd_isset是判斷那個fd被設定了。

注意:struct timeval timeout;超時時間設定必須在fd_clr、fd_set之後,不然會報錯,一開始沒有注意這個問題,發生離奇的錯誤,先把struct timeval timeout的值放在fd_clr、fd_set之前,報乙個select引數不合法,所以寫程式的思路還是要很清晰的。

select的列子說明select內部實現原理

1 select內部是個陣列,而epoll內部結構是紅黑二叉樹 2 select查詢起來慢,而epoll查詢起來快 3 每次迴圈,內部都要發生拷貝 檢視相關 而epoll不需要這樣的操作,也就是初始化一次拷貝 include include include include include int m...

linux下的Select函式

part1 fd set errorfds同上面兩個引數的意圖,用來監視檔案錯誤異常。struct timeval timeout是select的超時時間,這個引數至關重要,它可以使select處於三種狀態,第一,若將null以形參傳入,即不傳入時間結構,就是將select置於阻塞狀態,一定等到監視...

linux下select函式的使用

先看下列的例子程式 include include include include define stdin 0 define true 1 define false 0 define ulong unsigned long static struct timeval timelast static...