歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下select()中的timeout的設置與不設置問題

Linux下select()中的timeout的設置與不設置問題

日期:2017/2/28 16:17:26   编辑:Linux教程

Linux下的select,注意咯,不是pselect。

select()函數的最後一個參數是timeout,用來設置超時用的。

用的是一個struct timeval結構,需要用到sys/time.h文件。

struct timeval {

long tv_sec; 秒

long tv_usec; 毫毛

}

設置了timeout的值之後呢,select在沒有文件描述符監視可用的情況下,會等待這個timeout的時間,時間到了select返回0

如果timeout超時之前有文件描述符可用,則返回可用的數量,這時候的timeout則會依然計數,因此如果想要每次都超時一定的時間那麼在slelect返回>0的值之後要重新裝填timeout的值一次。www.linuxidc.com以保證超時時間沒有變化。

如果tv_sec和tv_usec都是0,那麼就是超時時間為0,那麼select就會立刻返回了。

如果timeout這裡是個NULL,那麼超時就未被啟用,會一直阻塞在監視文件描述符的地方。

在pselect中的timeout更牛X

用到了struct timespec {

long tv_sec; 秒

long tv_nsec; 納秒

}

時間更精確。

當然了系統做不了這麼精確的事情,一般Linux的系統精度也就是10ms左右了。

這裡說的重點在於timeout的值的選擇和處理上。

另外遇到的一個問題是信號SIGALRM會使得select返回-1並置errno為EINTR。但這個信號已經被我的sigaction干掉了函數處理了,這個問題還需要研究一下。

Copyright © Linux教程網 All Rights Reserved