libevent(一):简单使用

来源:互联网 发布:163邮箱smtp ssl 端口 编辑:程序博客网 时间:2024/05/19 21:17

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=/mydirmakemake 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

1 0
原创粉丝点击