signal-test是libevent自带的一个例子,展示了libevent对于信号事件的处理方法。
1 #include <sys/types.h> 2 3 #include <event2/event-config.h> 4 5 #include <sys/stat.h> 6 #include <sys/queue.h> 7 #include <unistd.h> 8 #include <sys/time.h> 9 #include <signal.h> 10 #include <fcntl.h> 11 #include <stdio.h> 12 #include <stdlib.h> 13 #include <string.h> 14 #include <errno.h> 15 16 #include <event2/event.h> 17 18 int called = 0; 19 20 static void signal_cb(evutil_socket_t fd, short event, void *arg) 21 { 22 struct event *signal = arg; 23 24 printf("%s:%d:%s: got signal %d\n", __FILE__, __LINE__, __func__, event_get_signal(signal)); 25 26 if (called >= 2) 27 { 28 event_del(signal); 29 } 30 31 called++; 32 } 33 34 int main(void) 35 { 36 struct event *signal_int; 37 struct event_base *base; 38 39 /* Initialize the event library */ 40 base = event_base_new(); 41 42 /* Initialize one event */ 43 signal_int = evsignal_new(base, SIGINT, signal_cb, event_self_cbarg()); 44 45 event_add(signal_int, NULL); 46 47 event_base_dispatch(base); 48 event_base_free(base); 49 50 return 0; 51 }