poll函數的用法


poll提供的功能與select類似,不過在處理流設備時,它能夠提供額外的信息。

  #include <poll.h>

  int poll(struct pollfd fd[], nfds_t nfds, int timeout);

    參數:

   1)第一個參數:一個結構數組,struct pollfd結構如下:

  struct pollfd{

  int fd;              //文件描述符

  short events;    //請求的事件

  short revents;   //返回的事件

  };

  events和revents是通過對代表各種事件的標志進行邏輯或運算構建而成的。events包括要監視的事件,poll用已經發生的事件填充revents。poll函數通過在revents中設置標志肌膚POLLHUP、POLLERR和POLLNVAL來反映相關條件的存在。不需要在events中對於這些標志符相關的比特位進行設置。如果fd小於0, 則events字段被忽略,而revents被置為0.標准中沒有說明如何處理文件結束。文件結束可以通過revents的標識符POLLHUN或返回0字節的常規讀操作來傳達。即使POLLIN或POLLRDNORM指出還有數據要讀,POLLHUP也可能會被設置。因此,應該在錯誤檢驗之前處理正常的讀操作。

poll函數的事件標志符值

常量 說明
POLLIN 普通或優先級帶數據可讀
POLLRDNORM 普通數據可讀
POLLRDBAND 優先級帶數據可讀
POLLPRI 高優先級數據可讀
POLLOUT 普通數據可寫
POLLWRNORM 普通數據可寫
POLLWRBAND 優先級帶數據可寫
POLLERR 發生錯誤
POLLHUP 發生掛起
POLLNVAL 描述字不是一個打開的文件
 

  注意:后三個只能作為描述字的返回結果存儲在revents中,而不能作為測試條件用於events中。

  2)第二個參數nfds:要監視的描述符的數目。

  3)最后一個參數timeout:是一個用毫秒表示的時間,是指定poll在返回前沒有接收事件時應該等待的時間。如果  它的值為-1,poll就永遠都不會超時。如果整數值為32個比特,那么最大的超時周期大約是30分鍾。

 

timeout值 說明
INFTIM 永遠等待
0 立即返回,不阻塞進程
>0 等待指定數目的毫秒數

(轉載自:https://blog.csdn.net/djinglan/article/details/8302938)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM