linux 非阻塞之poll和select操作

2021-09-25 16:36:20 字數 1155 閱讀 9790

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...