libevent(一):简单使用

libevent是一个跨平台的,事件驱动框架,支持文件描述符,定时器,信号;
一.安装
libevent官网下载当前最新的版本libevent-2.0.22-stable.tar.gz;

tar -xvf  libevent-2.0.22-stable.tar.gz;
cd  cd libevent-2.0.22-stable
./configure --prefix=/mydir
make
make install

安装完后,可以看到安装后的额目录结构如下:

mydir
├── bin
│   └── event_rpcgen.py
├── include
│   ├── evdns.h
│   ├── event2
│   │   ├── buffer_compat.h
│   │   ├── bufferevent_compat.h
│   │   ├── bufferevent.h
│   │   ├── bufferevent_ssl.h
│   │   ├── bufferevent_struct.h
│   │   ├── buffer.h
│   │   ├── dns_compat.h
│   │   ├── dns.h
│   │   ├── dns_struct.h
│   │   ├── event_compat.h
│   │   ├── event-config.h
│   │   ├── event.h
│   │   ├── event_struct.h
│   │   ├── http_compat.h
│   │   ├── http.h
│   │   ├── http_struct.h
│   │   ├── keyvalq_struct.h
│   │   ├── listener.h
│   │   ├── rpc_compat.h
│   │   ├── rpc.h
│   │   ├── rpc_struct.h
│   │   ├── tag_compat.h
│   │   ├── tag.h
│   │   ├── thread.h
│   │   └── util.h
│   ├── event.h
│   ├── evhttp.h
│   ├── evrpc.h
│   └── evutil.h
├── lib
│   ├── libevent-2.0.so.5 -> libevent-2.0.so.5.1.9
│   ├── libevent-2.0.so.5.1.9
│   ├── libevent.a
│   ├── libevent_core-2.0.so.5 -> libevent_core-2.0.so.5.1.9
│   ├── libevent_core-2.0.so.5.1.9
│   ├── libevent_core.a
│   ├── libevent_core.la
│   ├── libevent_core.so -> libevent_core-2.0.so.5.1.9
│   ├── libevent_extra-2.0.so.5 -> libevent_extra-2.0.so.5.1.9
│   ├── libevent_extra-2.0.so.5.1.9
│   ├── libevent_extra.a
│   ├── libevent_extra.la
│   ├── libevent_extra.so -> libevent_extra-2.0.so.5.1.9
│   ├── libevent.la
│   ├── libevent_openssl-2.0.so.5 -> libevent_openssl-2.0.so.5.1.9
│   ├── libevent_openssl-2.0.so.5.1.9
│   ├── libevent_openssl.a
│   ├── libevent_openssl.la
│   ├── libevent_openssl.so -> libevent_openssl-2.0.so.5.1.9
│   ├── libevent_pthreads-2.0.so.5 -> libevent_pthreads-2.0.so.5.1.9
│   ├── libevent_pthreads-2.0.so.5.1.9
│   ├── libevent_pthreads.a
│   ├── libevent_pthreads.la
│   ├── libevent_pthreads.so -> libevent_pthreads-2.0.so.5.1.9
│   ├── libevent.so -> libevent-2.0.so.5.1.9
│   └── pkgconfig
│       ├── libevent_openssl.pc
│       ├── libevent.pc
│       └── libevent_pthreads.pc
└── local
    ├── include
    │   └── hiredis
    │       ├── adapters
    │       │   ├── ae.h
    │       │   ├── glib.h
    │       │   ├── ivykis.h
    │       │   ├── libevent.h
    │       │   ├── libev.h
    │       │   ├── libuv.h
    │       │   ├── macosx.h
    │       │   └── qt.h
    │       ├── async.h
    │       ├── hiredis.h
    │       ├── read.h
    │       └── sds.h
    └── lib
        ├── libhiredis.a
        ├── libhiredis.so -> libhiredis.so.0.13
        ├── libhiredis.so.0.13
        └── pkgconfig
            └── hiredis.pc

二.使用
2.1 定时器和信号
test_event.c:

#include<stdio.h>
#include<signal.h>
#include<event2/event.h>

void onTime(int fd, short event, void* arg)
{
    struct timeval tv; 
    tv.tv_sec = 10; 
    tv.tv_usec = 0;
    printf("onTime called ! \n");
    event_add( *(struct event**)arg, &tv);
}

void onSigusr1(int sig, short event, void* arg)
{
    printf("recieve sig %d \n", sig);
}

int main()
{
    struct event_base* base = NULL;
    struct event* timer = NULL;
    struct timeval tv; 
    struct event* esig = NULL;

     base = event_base_new();
     if(!base){
         printf("event_base_new() failed !\n");
     }   

    //增加定时器
    timer = evtimer_new(base, onTime, &timer);
    tv.tv_sec = 10; 
    tv.tv_usec = 0;
    event_add(timer, &tv);

    //增加信号监听
    esig = evsignal_new(base, SIGUSR1, onSigusr1, NULL);  
    event_add(esig, NULL);
    event_base_dispatch(base);
    return 0;
}

makefile

 all:test_event.c
       gcc -o test_event test_event.c -I/mydir/include -L/mydir/lib -levent

运行结果 , (中间向进程发了一次SIGUSR1信号):

./test_event 
onTime called ! 
onTime called ! 
recieve sig 10 
onTime called ! 

2.2 socket
参考Example: A low-level ROT13 server with Libevent

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值