libevent

libeventを使ったhello, world的な小さなプログラム。
(libeventはmemcachedやThriftなどでも利用されているイベント通知API)

・ファイルが更新されたら内容を表示する

#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

 

Tags:

Comments

No comments so far.

  • Leave a Reply
     
    Your gravatar
    Your Name