本文演示一個最簡單的基于libevent編程的例子。libevent是事件驅(qū)動的IO,適用于“好萊塢原則”。
“好萊塢原則”就是說:“不要給我們打電話,我們會給你打電話(don‘t call us, we‘ll call you)”。
所以基于libevent編程,和傳統(tǒng)的阻塞、非阻塞、select等會有一些差異,基于libevent編程的時候,不是我APP去詢問kernel能否做I/O,它是發(fā)過來的,讓IO事件來驅(qū)動你。
它的主要流程是:針對IO事件,注冊callback函數(shù),一旦事件到來,由事件dispatch引擎,回調(diào)你的函數(shù)。
下面我們演示一個最簡單的例子,這個程序偵聽終端設(shè)備的標(biāo)準(zhǔn)輸入事件,注冊了一個回調(diào)函數(shù)cmd_event():
其中的:
event_set(&ev_cmd, STDIN_FILENO,
EV_READ | EV_PERSIST, cmd_event, NULL);
其實就是偵聽STDIN_FILENO的輸入,并且掛接cmd_event()回調(diào)函數(shù)的代碼。這樣一旦有輸入,cmd_event()被調(diào)用。cmd_event()會將輸入的字符串進(jìn)行printf的輸出打印,程序運行效果如下:
-
IO
+關(guān)注
關(guān)注
0文章
434瀏覽量
39049 -
編程
+關(guān)注
關(guān)注
88文章
3565瀏覽量
93536 -
程序員
+關(guān)注
關(guān)注
4文章
949瀏覽量
29744
原文標(biāo)題:一個最簡單的事件驅(qū)動的IO libevent編程例子
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論