libeventを使ったhello, world的な小さなプログラム。
(libeventはmemcachedやThriftなどでも利用されているイベント通知API)
・ファイルが更新されたら内容を表示する
[cpp]
#include
#include
#include
#include
#include
#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);
}
[/cpp]
event_set 関数で EV_PERSIST を指定すると、イベント通知を継続して受け取ります。
これを指定しない場合は、コールバック関数内で再度 event_add 関数を呼び出す必要があります。
また、登録したイベントを削除したい場合は event_del 関数を利用します。
・参考
libevent + 使い方 | NINXIT-BLOG