select函式使用總結

2021-06-17 23:53:28 字數 666 閱讀 6138

函式原型為:

int select(intmaxfdpl, fd_set * readfds, fd_set *writefds,

fd_set * read exceptfds, struct timeval* tvptr);

1、前面文章已詳細解釋最後乙個引數,表示超時的引數,但是在除錯過程中發現設定了超時時間,但只有第一次

select

的時候起作用,以後每次都是立即返回超時,和超時時間設為

0效果一樣,通過查閱相關資料發現

select()

函式內部不斷更新

tvptr

的值,以檢視超時時間還剩多少,如果不在每次呼叫

select

函式前給

tvptr

賦值,那麼第一次呼叫之後,

tvptr

的值就被更新至

0了,以後不管你再呼叫它多少次,

select()

都會立即返回了。 2

、每次呼叫

select

函式前都要把所檢測的檔案描述符集合清空,重新賦值,否則檢測不到檔案描述符的變化。

3、前面文章只對第二個、第三個引數做了介紹,第四個引數是檢測描述符異常的集合。

fd_set * read exceptfds, struct timeval* tvptr);

select函式總結

阻塞方式block,就是程序或是執行緒執行到這些函式時必須等待某個事件的發生,如果事件沒有發生,程序或執行緒就被阻塞,函式不能立即返回。使用select就可以完成非阻塞non block,就是程序或執行緒執行此函式時不必非要等待事件的發生,一旦執行肯定返回,以返回值的不同來反映函式的執 況,如果事件...

select 函式 使用

告知核心等待某一或某些事件發生 而後喚醒程序 或超時返回 int select int maxfdp1,fd set readset,fd set writeset,fd set excepset,const struct timeval timeout 返回準備好的描述符數量 超時返0錯誤 1 主...

select函式使用

這兩天寫了這麼一段 select直接返回 1,錯誤資訊是 invalid argments 顯然沒有達到阻塞超時的效果。如下 bool issocketwaitread inf fd,int usec 這段 在標準的linux環境可以執行,但是在arm體系架構的國產化作業系統下,返回值永遠是 1 修...