linux下select和epoll函式總結

2021-08-01 09:32:48 字數 1538 閱讀 3956

多路io轉接伺服器實現的主旨思想是,不再由應用程式自己監視客戶端連線,取而代之由核心替應用程式監視檔案。

select函式:

int select(int nfds,fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

功能:監聽檔案描述符集合,

成功,返回所監聽的集合中滿足條件的總數(並不知道是哪乙個fd,哪乙個事件,需要自己判斷,要監控新的fd需要重新準備要被偵聽的檔案描述符集合)

nfds:       監控的檔案描述符集裡最大檔案描述符加1,因為此引數會告訴核心檢測前多少個檔案描述符的狀態

readfds:   監控有讀資料到達檔案描述符集合,傳入傳出引數

writefds:  監控寫資料到達檔案描述符集合,傳入傳出引數

exceptfds: 監控異常發生達檔案描述符集合,如帶外資料到達異常,傳入傳出引數

timeout:   定時阻塞監控時間,3種情況

1.null,永遠等下去

2.設定timeval,等待固定時間

3.設定timeval裡時間均為0,檢查描述字後立即返回,輪詢

struct timeval epoll_data_t;

epollin:  表示對應的檔案描述符可以讀(包括對端socket正常關閉)

epollout:  表示對應的檔案描述符可以寫

epollpri:  表示對應的檔案描述符有緊急的資料可讀(這裡應該表示有帶外資料到來)

epollerr:  表示對應的檔案描述符發生錯誤

epollhup:  表示對應的檔案描述符被結束通話;

epollet:   將epoll設為邊緣觸發(edge triggered)模式,這是相對於水平觸發(level triggered)而言的

epolloneshot:只監聽一次事件,當監聽完這次事件之後,如果還需要繼續監聽這個socket的話,需要再次把這個socket加入到epoll佇列裡

int  epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout)

功能:等待所監控檔案描述符上有事件的產生

events:    用來存核心得到事件的集合,定義乙個陣列傳進來

maxevents: 告之核心這個events有多大,這個maxevents的值不能大於建立epoll_create()時的size,自定義event陣列的最大值

timeout:   是超時時間

-1: 阻塞

0: 立即返回,非阻塞

>0: 指定毫秒

返回值: 成功返回有多少檔案描述符就緒,時間到時返回0,出錯返回-1;

linux下select和poll的用法

select 函式的作用 系統呼叫select和poll的後端實現,用這兩個系統呼叫來查詢裝置是否可讀寫,或是否處於某種狀態。如果poll為空,則驅動裝置會被認為即可讀又可寫,返回值是乙個狀態掩碼 如何使用select 函式?select 函式的介面主要是建立在一種叫 fd set 型別的基礎上。它...

linux系統下select和poll的實現機理

1.使用者層應用程式呼叫select 2.核心層呼叫sys select do select 最終呼叫檔案描述符fd對應的struct file型別變數的struct file operations f op的poll函式。poll指向的函式返回當前可否讀寫的資訊。1 如果當前可讀寫,返回讀寫資訊。...

Linux下select和poll的用法

select 函式的作用 系統呼叫select和poll的後端實現,用這兩個系統呼叫來查詢裝置是否可讀寫,或是否處於某種狀態。如果poll為空,則驅動裝置會被認為即可讀又可寫,返回值是乙個狀態掩碼 如何使用select 函式?select 函式的介面主要是建立在一種叫 fd set 型別的基礎上。它...