使用Libev
Libev的作者写了一份很好的官方Manual,比较的齐全,即介绍了Libev的设计思想,也介绍了基本使用还包括内部各类事件详细介绍。这里略微赘述一下。Libev通过一个 ·struct ev_loop· 结结构表示一个事件驱动的框架。在这个框架里面通过ev_xxx
结构,ev_init
、ev_xxx_set
、ev_xxx_start
接口箱这个事件驱动的框架里面注册事件监控器,当相应的事件监控器的事件出现时,便会触发该事件监控器的处理逻辑,去处理该事件。处理完之后,这些监控器进入到下一轮的监控中。符合一个标准的事件驱动状态的模型。
Libev 除了提供了基本的三大类事件(IO事件、定时器事件、信号事件)外还提供了周期事件、子进程事件、文件状态改变事件等多个事件,这里我们用三大基本事件写一个例子,和Manual上的类似,但是没有做收尾工作,为的是将事件的框架清晰的呈现出来。
01 |
#include<ev.h> |
02 |
#include <stdio.h> |
03 |
#include <signal.h> |
04 |
#include <sys/unistd.h> |
05 |
06 |
ev_io io_w; |
07 |
ev_timer timer_w; |
08 |
ev_signal signal_w; |
09 |
10 |
void io_action(struct ev_loop *main_loop,ev_io *io_w, int e) |
11 |
{
|
12 |
int rst; |
13 |
char buf[ 1024 ] = { |