libeventを使ったhello, world的な小さなプログラム。
(libeventはmemcachedやThriftなどでも利用されているイベント通知API)
・ファイルが更新されたら内容を表示する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <fcntl.h> #include <event.h> #define BUF 256 void callback(int fd, short event, void* arg); int main(int argc, char** argv) { int fd; struct event ev; if((fd = open(argv[1], O_RDONLY)) == -1) { perror("open"); return -1; } event_init(); event_set(&ev, fd, EV_READ | EV_PERSIST, callback, &ev); event_add(&ev, NULL); event_dispatch(); return 0; } void callback(int fd, short event, void* arg) { char buf[BUF]; int len; // event_add((struct event*)arg, NULL); if((len = read(fd, buf, sizeof(buf) - 1)) == -1) { perror("read"); return; } buf[len] = '\0'; printf("%s", buf); } |
event_set 関数で EV_PERSIST を指定すると、イベント通知を継続して受け取ります。
これを指定しない場合は、コールバック関数内で再度 event_add 関数を呼び出す必要があります。
また、登録したイベントを削除したい場合は event_del 関数を利用します。
・参考
libevent + 使い方 | NINXIT-BLOG