不同於select使用三個位圖來表示三個fdset的方式,poll使用了一個人pollfd的指針來實現。
pollfd結構包含了要監視的event和要發生的event,不在使用select“參數-值”的方式。同時,pollffd並沒有最大數量限制(但是數量過大後性能也是會下降)。poll返回後,需要輪詢pollfd來獲取就緒的描述符。
從上面看,select和poll都需要在返回後,通過遍歷文件描述符來獲取已經就緒的socket。 事實上,同時連接的大量客戶端在同一時刻可能只有很少的處於就緒狀態,因此隨着監視的描述符數量的增長,其效率也會線性下降。
下邊列舉示例:使用poll監控輸入
結果輸出爲:
運行程序時,如果不輸入,超出timeout設置的時間,就會提示timeout
輸入後,程序會從stdin讀到輸入的內容,回顯到屏幕。