poll裝置操作
使用者空間中的select對應核心中的poll
1.select系統呼叫用於多路監控,當沒有乙個檔案滿足要求時,select將阻塞呼叫程序。
int select(int maxfd,fd_set *readfds,fd_set *writefds,fe_set *exceptfds,const struct timeval *timeout)
maxfd:檔案描述符的範圍,比待檢測的最大檔案描述符大1即可
readfds:被讀監控的檔案描述符
writefds:被寫監控的檔案描述符
exceptfds:被異常監控的檔案描述符
timeout:定時器,0:不管是否滿足要求,都會立即返回。null:select將阻塞,直到某個檔案滿足要求。正整數:就是等待的最長時間,即select在timeout時間內阻塞程序
2.返回值:正常情況下,返回滿足要求的檔案描述符個數,經過timeout等待後仍無檔案滿足要求,返回0;select被某個訊號中斷,返回-1並設errno為eintr;如果出錯,返回-1並設定相應的errno
3.使用步驟:
1.將要監控的檔案新增到檔案描述符集
2.呼叫select開始監控
3.判斷檔案是否發生變化
系統提供了4個巨集來對描述符集來進行描述
#include
fd_set,fd_clr,fd_sero,fd_isset
4.poll方法
原型:unsigned int(*poll)(struct file *filp,poll_table *wait)
poll裝置方法負責完成
1.使用poll_wait將等待佇列新增到poll_table
2.返回描述裝置是否可讀或可寫的掩碼(pollin,pollrdnorm等)
5.範例
static unsigned int mem_poll(struct file *filp,poll_table *wait)
6.工作原理
poll方法只是做乙個登記,真正的阻塞發生在select.c中的do_select函式。
do_select中根據返回的掩碼來決定是否發生阻塞(通過排程)
poll裝置方法
當應用程式需要進行對多檔案讀寫時,常用到poll system v select bsd unix epoll linux2.5.45開始 沒驗證 系統呼叫配合使用。當poll函式返回時,會給出乙個檔案是否可讀寫的標誌,應用程式根據不同的標誌讀寫相應的檔案,實現阻塞或非阻塞的讀寫。這些系統呼叫功能相...
7 4 POLL裝置方法
系統呼叫 使用者空間 驅動 核心空間 open open close release read write ioctl ioctl lseek llseek select poll select系統呼叫 用於多路監控,當沒有乙個檔案滿足要求時,select將阻塞呼叫程序。int select max...
Linux 裝置驅動poll輪詢程式設計
linux系統下網路模型數select最為常用,當然,select只是檢測檔案系統資料狀態,並不只侷限於網路程式設計,select的功能需要底層驅動提供支援,其中核心應用即為等待佇列,其他模型,如poll和epoll,對驅動來說並無區別,驅動只是返回資料狀態而已。驅動支援select,需要實現fil...