select函數

select函數的主要用途爲檢測一組文件描述符的狀態變化,另一個用途是用作定時器。

man select:The function select wait for a number of file descriptors to change status.

頭文件

#include <sys/select.h>

聲明

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

返回值

1)< 0:select錯誤。

2)= 0:超時

3)> 0:fd status發生變化。

相關宏

FD_CLR(int fd, fd_set *set);

FD_ISSET(int fd, fd_set *set);
FD_SET(int fd, fd_set *set);
FD_ZERO(fd_set *set);

結構體

1:fd_set

由於fd_set類型的長度在不同平臺上不同,因此應該用上述的標準的宏定義來處理。通常fd_set是一個long型的整數。

2:struct timeval

時間結構體包含秒和毫秒。當select中該參數是NULL,則表示select置於阻塞狀態,一定等到監視文件描述符集合中某個文件描述符發生變化爲止;若是0,則表示不等待,若將時間值設爲0秒0毫秒,就變成一個純粹的非阻塞函數,不管文件描述符是否有變化,都立刻返回繼續執行,文件無變化返回0,有變化返回一個正值。

 

我們擁有了一個以微秒爲單位的記時器!但是因爲Linux 和UNIX 一樣,最小的時間片是100 微秒,所以不管你將tv_usec 設置的多小,實質上記時器的最小單位是100微秒.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章