linux 查看libevent 安装目录,关于Linux下libevent库的基础安装和使用

关于libevent库

Libevent 是一个轻量级的开源高性能网络库,有几个显著的亮点:

事件驱动(event-driven),高性能;

轻量级,专注于网络,不如 ACE 那么臃肿庞大;

源代码相当精炼、易读;

跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;

支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;

支持 I/O,定时器和信号等事件;

注册事件优先级;

Libevent 已经被广泛的应用,作为底层的网络库;比如 memcached、Vomit、Nylon、Netchat

等等。

关于libevent的安装

下载安装包

解压

# tar zxvf libevent-2.0.10-stable.tar.gz

进入目录

# cd libevent-2.0.10-stable

切换到root

# su

安装gcc

# yum install gcc

设置安装路径

# ./configure --prefix=/usr

编译

# make

安装

# make install

测试libevent是否安装成功:

ls -al /usr/lib | grep libevent

lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3

-rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3

-rw-r–r– 1 root root 454156 11?? 12 17:38 libevent.a

-rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.la

lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.3

libevent的使用

第一个例子:

int main()

{

int sockfd = create_socket();

struct event_base * base = event_init();

assert( base != NULL );

struct event* ev_sock = event_new(base,sockfd,EV_READ|EV_PERSIST,accept_cb,(void*)base);

assert( ev_sock != NULL );

event_add(ev_sock,NULL);

event_base_dispatch(base);

event_free(ev_sock);

event_base_free(base);

}

第二个例子:

int main()

{

struct event_base *base = event_init();

struct event *signal_event = evsignal_new(base,SIGINT,signal_cb,base);

event_add(signal_event,NULL);

struct timeval tv = {3,0};

struct event *timeout_event = evtimer_new(base,timeout_cb,NULL);

event_add(timeout_event,&tv);

event_base_dispatch(base);

event_free(timeout_event);

event_free(signal_event);

event_base_free(base);

}

这两个简单例子反映了event库使用时的代码逻辑:

首先用event_init()来构建一个event_base对象

创建具体的事件event *用来表示具体事件,用evsignal_new,或者evtimer_new来注册事件,两个函数本质上来说都是对函数event_new()的封装 struct event* event_new(struct event_base *base, evutil_socket_t fd,

short event, void (*cb)(evutil_socket_t fd,

short event, void *arg),void *arg);

//short event所使用的宏名

#define EV_TIMEOUT 0x01 //定时时间

#define EV_READ 0x01 //可读时间

#define EV_WRITE 0x01 //可写时间

#define EV_SIGNAL 0x01 //信号时间

#define EV_PERSIST 0x01 //永久时间

3. 调用event_add()函数,将事件注册到事件表中去

4. 调用event_base_dispatch()执行事件循环

5. 事件结束后,利用event_free()来释放事件资源,利用event_base_free()来释放event_free对象

> 如果事件表中都是一次性事件,一次事件触发后会结束事件从此不再监听

> evtimer_new()默认的超时事件是一个一次性的事件,如果需要多次监听,可以从event_new中进行详细的设置

> event_new()中,信号事件直接在fd处写入信号名称,如果是超时事件,则用-1来表明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值