I O多路複用之poll

2022-08-05 17:54:11 字數 1113 閱讀 6977

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...