高级I/O框架库libevent

Posted 渔腻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高级I/O框架库libevent相关的知识,希望对你有一定的参考价值。

libevent是基于reactor模式建立的,reactor由四部分构成:

句柄(文件描述符),时间多路分发器(I/O复用函数),

事件处理器(回调函数),reactor

libevent有如下特点:跨平台支持,同一事件源,线程安全;

所以第一步定义libevent实例:

struct event base *base = event_init();

接下来:因为libevent可以监听三种事件:I/O事件,信号事件,定时事件

所以定义事件可以用统一的event_new();

也可以用evsignal_new()/evtimer_new();

如果定义信号事件:

struct event *sig_ev = evsignal_new(base,SIGINT,sig_fun,NULL);

或者 struct event *sig_ev = event_new(base,SIGINT,EV_SIGNAL,sig_fun,NULL);

这里sig_fun是事件处理函数,如果要求不断地响应事件,可以将其设置为永久事件

即就是:EV_SIGNAL|EV_PERSIST;

下来就是注册事件,将事件添加至反应堆里,event_add(sig_ev,NULL);

第四步,事件循环,调用event_base_dispath(base);

之后当事件处理完将事件移除反应堆:event_free(sig_ev);

event_base_free(base);

差不多就是libevent处理事件的全过程。

 

以上是关于高级I/O框架库libevent的主要内容,如果未能解决你的问题,请参考以下文章

UNIX环境高级编程 标准IO库

高性能I/O框架库Libevent

标准I/O库

深入理解计算机系统 第十章 系统级I/O

:系统级I⁄O

UNIX环境高级编程笔记之高级I/O