poll函式和select函式非常相似,但是函式介面不一樣。
#include
int poll(struct pollfd *fdarray, unsigned long nfds, int timeout);
返回:就緒描述字的個數,0-超時,-1-出錯
第一個引數是指向一個結構陣列第一個元素的指標。每個陣列元素都是一個pollfd結構,用於指定測試某個給定描述字fd的條件。
struct pollfd{
int fd; //descriptor to check
short events; //events of interest on fd
short revents; //events that occurred on fd
要測試的條件由events成員指定,而返回的結果則在revents中儲存。常用條件及含意說明如下:
poll函式可用的測試值
常量
說明
pollin
普通或優先順序帶資料可讀
pollrdnorm
普通資料可讀
pollrdband
優先順序帶資料可讀
pollpri
高優先順序資料可讀
pollout
普通資料可寫
pollwrnorm
普通資料可寫
pollwrband
優先順序帶資料可寫
pollerr
發生錯誤
pollhup
發生掛起
pollnval
描述字不是一個開啟的檔案
注意:後三個只能作為描述字的返回結果儲存在revents中,而不能作為測試條件用於events中。
第二個引數nfds是用來指定陣列fdarray的長度。
最後一個引數timeout是指定poll函式返回前等待多長時間。它的取值如下:
timeout值
說明
inftim
永遠等待
0立即返回,不阻塞程序
>0等待指定數目的毫秒數
I O多路複用之poll
回憶一下 select介面 intselect int nfds fd set readfds fd set writefds fd set...
I O多路複用之select
1 什麼是i o多路複用 關於什麼是i o多路複用,在知乎上有個很好的回答,可以參考羅志宇前輩的回答。 這裡記錄一下自己的理解。我認為要理解...
轉I O多路複用之select
select的功能可以用一句話來描述 實現基於i o多路複用的非同步併發程式設計。 在具體講解select之前我們先看看常規的阻塞socket程式設計方式,以服務端為例 對於這種方式,最大的問題在 呢?accept和recev的阻塞呼叫!下面以兩種場景為例,來說明相比這種情況,select是如何做到非同步i o...