2013-05-27 64 views
4
int select(int nfds, 
      fd_set *readfds, 
      fd_set *writefds, 
      fd_set *exceptfds, 
      struct timeval *timeout); 

selectnfds第一個參數,應該是最大的文件描述符加1,這應該是至少1
但我已經看到了一些代碼設置NFDs的是0,這是使用合法的嗎?
另外,當nfds爲負數或timeout包含無效值時,返回值select設置爲EINVAL。同樣,它沒有說明當nfds爲0時發生了什麼。當nfds爲0時,「select」會做什麼?

+0

可能重複的[爲什麼使用select()而不是sleep()?](http://stackoverflow.com/questions/3125645/why-use-select-instead-of-sleep) – hyde

回答

3

它等待了給定超時,然後返回0,或將其與EINTR返回越快。如果你仔細想一想,這是非常有道理的,事實上它就是文檔所說的,儘管它沒有明確地說出來。如果所有的設置都是NULL或者其中沒有小於nfds的位,那麼會發生同樣的情況。

5

man page

一些代碼調用select()與所有三套空,NFDS零,一個非空超時一個相當簡便的方式與亞秒級精確睡覺。

+0

它應該是注意到,如果有任何新手發現這種混淆,那麼'select'是在'nanosleep'得到廣泛支持之前做到這一點的唯一可行的方法,並且該引用已經在那個長時間**的手冊頁中。 –

相關問題