1. 程式人生 > >一個最簡單的事件驅動的IO libevent程式設計例子

一個最簡單的事件驅動的IO libevent程式設計例子

你不一定要點藍字關注我們哦

640?wx_fmt=gif&wxfrom=5&wx_lazy=1

本文演示一個最簡單的基於libevent程式設計的例子。libevent是事件驅動的IO,適用於“好萊塢原則”。

“好萊塢原則”就是說:“不要給我們打電話,我們會給你打電話(don‘t call us, we‘ll call you)”。

所以基於libevent程式設計,和傳統的阻塞、非阻塞、select等會有一些差異,基於libevent程式設計的時候,不是我APP去詢問kernel能否做I/O,它是發過來的,讓IO事件來驅動你。

它的主要流程是:針對IO事件,註冊callback函式,一旦事件到來,由事件dispatch引擎,回撥你的函式。

下面我們演示一個最簡單的例子,這個程式偵聽終端裝置的標準輸入事件,註冊了一個回撥函式cmd_event():

640?wx_fmt=png&wxfrom=5&wx_lazy=1

其中的:

event_set(&ev_cmd, STDIN_FILENO,

  EV_READ | EV_PERSIST, cmd_event, NULL);

其實就是偵聽STDIN_FILENO的輸入,並且掛接cmd_event()回撥函式的程式碼。這樣一旦有輸入,cmd_event()被呼叫。cmd_event()會將輸入的字串進行printf的輸出列印,程式執行效果如下:

640?wx_fmt=png