当前位置: 代码迷 >> 综合 >> libevent(一):简单使用
  详细解决方案

libevent(一):简单使用

热度:32   发布时间:2024-01-04 07:51:45.0

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.cgcc -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

  相关解决方案