I/O多路複用——poll

poll系統調用和select相似,也是在指定時間內輪詢必定數量的文件描述符,以測試其中是否有就緒者。數組

不一樣於select使用三個位圖來表示三個fdset的方式,poll使用一個pollfd的指針實現。ide


poll API測試

wKioL1frkuaTcqS_AAAa4AWLLKE363.png

1)fds參數是一個pollfd結構類型的數組,它指定全部咱們感興趣的文件描述符上發生的可讀、可寫和異常事件。spa

poll結構體的定義以下:指針

wKioL1frk4OwYQGQAAAjekE4Qvg986.png

fd成員指定文件描述符,events成員告訴poll監聽fd上的哪些事件,它是一系列事件的按位或;blog

revents成員則由內核修改,以通知應用程序fd上實際發生了哪些事件。事件

poll支持的事件類型以下圖所示get


wKioL1frlJnxdayPAACvWwPthlc350.png

2)nfds參數指定被監聽的時間集合fds的大小。其類型nfds_t的定義以下:it

typedef unsigned long int nfds_t;
io

3)timeout參數指定poll的超時值,單位是毫秒。當timeout爲-1時,poll調用將永遠阻塞,直到某個事件發生;當timeout爲0時,poll調用將當即返回。


poll系統調用的返回值的含義與select相同。

poll成功時返回就緒(可讀、可寫和異常)文件描述符的總數。若是在timeout時間內沒有任何文件描述符就緒,select將返回0。poll失敗時返回-1並設置errno。若是在poll等待期間,程序接收到信號,則poll當即返回-1並設置errno爲EINTR。

相關文章
相關標籤/搜索