fdset: pollfd結構體陣列,pollfd的結構體定義如下:
#include
struct pollfd
單看這個結構是不是有點懵,但是如果我們知道這些事件型別分為可讀/可寫/異常這三種,或許好理解一點,這個結構體指定了我們感興趣的檔案描述符上發生的可讀可寫和異常事件;
現在或許還是很懵,我們繼續;
nfds:該引數指定了pollfd結構體陣列fdset的大小,nfds_t是乙個無符號長整型型別:typedef unsigned long int nfds_t
timeout:該引數指定poll的超時時間,單位是毫秒。
timeout == -1:永久等待,直到指定的描述符有事件發生或捕捉到訊號時返回;
timeout == 0 :執行完描述符立刻返回;
timeout > 0 :在超時時間內,指定描述符有事件發生或捕捉到訊號時返回。
poll的返回值:
返回值 > 0: 陣列fdset已經準備好讀寫或異常事件的描述符的總數量;
返回值 == 0:在超時時間內沒有任何描述符準備好了;
返回值 == -1:函式呼叫失敗了。
在理解poll實現的功能到底是什麼之前,我們有乙個大前提,poll是一種i/o多路復用機制,那一定和讀寫有關了。先來看乙個簡單一點的例子:
#include
#include
#include
#include
intmain()
if(fdset[0]
.revents == pollin)
}return0;
}
這段**實現的功能很容易理解:一旦有鍵盤輸入便會觸發pollin事件,然後我們讀取從鍵盤輸入的資料;一旦poll監聽多個描述符,便可實現多路i/o。
poll的優缺點和應用場景,等我過完epoll和select之後整理總結。
poll先到這……
三種I O多路復用機制學習記錄 select 2
現在開始學習三種i o多路復用機制的第二種 select,上篇文章也講到,由於我水過了作業系統的上機,因此要不停的補坑,在校的各位未來程式設計師們,上課要好好學習,一定要自己敲。select我真的有點不記得了,但是學過go語言的通道後,一定也會知道go語言中也有乙個select,這兩個select功...
IO模型 io多路復用(三)
兩者相互比較 1 如果只有乙個使用者連線server端,多路復用io還不如阻塞io效率高 2 相比阻塞io,多路復用io中間多了個反饋機制 3 多路復用io的 可以同時監控socket 多個socket物件coon1 coon2.recv 4 多路復用io可以識別有人連線某個coon3,然後告知有c...
多路復用IO 學習筆記
1 阻塞io,常用的scanf printf read write cout cin 2 非阻塞io,recv send和qt中read write 3 多路復用io 4 訊號驅動io 5 非同步io在不建立新的程序和執行緒的情況下監控多個檔案描述符,多應用於網路程式設計時乙個服務端程式為多個客戶端...