poll和select操作
乙個應用使用裝置時採用
阻塞io:會使程序休眠,讓出cpu,高效
非阻塞io:不停查詢,占用cpu,低效
乙個應用控制多個裝置檔案來達到需求,但當乙個裝置檔案發生阻塞時呼叫程序被休眠,
其他裝置檔案就停止工作
阻塞方式:在read呼叫時阻塞
應用–>read()–>sys_read—>***_read例程
io復用:阻塞一組檔案的描述符
應用–>poll()/select()–>sys_poll—>***_poll–>poll_wait例程
比如乙個應用中使用多個串列埠,乙個串列埠在等待接收資料而阻塞,
其他串列埠已接收到資料不能讀.
linux應用中使用select()/poll()實現
select()介紹較多,poll()與它功能相同,有更方便的介面.
poll()函式也是用於io復用的函式.
4個按鍵用read讀取和鍵盤讀取資訊
應用部分
#include int main(void)
if(pfds[1].revents & pollin)
}
驅動部分
//設計乙個描述按鍵的結構體型別
struct buttons;
//定義乙個陣列來儲存多個按鍵的資料
struct buttons buttons_set = ,略
}static struct file_operations fops = ;
static int __init button_init(void)
static void __exit button_exit(void)
}
中斷程式
irqreturn_t button_irq_svc(int irqno, void *dev)
小結:
io模型
同步:阻塞io read
非阻塞io open(o_nonblock)read
非同步:阻塞io poll
非阻塞io 類
linux 網路程式設計 四 非阻塞通訊poll
include int poll struct pollfd fds,nfds t nfds,int timeout typedef struct pollfd pollfd t typedef unsigned long nfds t fds 是乙個struct pollfd結構型別的陣列,用於存...
Linux阻塞和非阻塞
阻塞 休眠 呼叫是沒有獲得資源則掛起程序,被掛起的程序進入休眠狀態,呼叫的函式只有在得到結果之後才返回,程序繼續。非阻塞 休眠 是不能進行裝置操作時不掛起,或返回,或反覆查詢,直到可以進行操作為止,被呼叫的函式不會阻塞當前程序,而會立刻返回。因為阻塞的程序會進入休眠狀態,因此,必須確保有乙個地方能夠...
I O非阻塞函式實踐 poll
同樣先貼上改進 include include include include include include include include include include define max conn 100 define max nu 10000 int main int argc,char...