Hello!

By adding EV_ET to the flags, I can watch a directory for changes --
such as files being added or removed to it -- using libevent (at least,
on FreeBSD). Sample program attached.

Does libev provide a similar functionality? Some mailing list archives
suggest, edge-triggered events aren't supported by libev (for
portability?), but those pages are from 2010. Have there been
improvements since, perhaps?

Libevent did not have EV_ET until fairly recently too, but it is there
now... Please, advise. Thank you!

    -mi

#include <sys/types.h>

#include <dirent.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sysexits.h>

#include <event2/event.h>

static void
handler(evutil_socket_t fd, short type, void *_p)
{
        const char *p = _p;

        printf("%s (%d) triggered by event(s) %hd\n", p, (int)fd, type);
}

static void
errhandler(int err)
{
        fprintf(stderr, "Error %d (%s) occured\n", err, strerror(err));
}

int
main(int argc, char *argv[])
{
        int      dd, i;
        DIR     *dp;

        struct event_base       *eb;
        struct event            *e;

        dp = opendir(argv[argc - 1]);
        if (dp == NULL) {
                fprintf(stderr, "%s: %s: %s\n", argv[0], argv[argc - 1],
                    strerror(errno));
                exit(EX_NOINPUT);
        }
        dd = dirfd(dp);

        event_set_fatal_callback(errhandler);
        eb = event_base_new();
        e = event_new(eb, dd, EV_WRITE|EV_READ|EV_ET|EV_PERSIST, handler,
            argv[argc - 1]);
        event_add(e, NULL);
        switch (i = event_base_dispatch(eb)) {
        case -1:
                fprintf(stderr, "event_base_dispatch failed\n");
                exit(EX_SOFTWARE);
        case 1:
                fprintf(stderr, "event_base_dispatch found no "
                    "events to care\n");
                exit(EX_SOFTWARE);
        case 0:
                break;
        default:
                fprintf(stderr, "event_base_dispatch returned "
                    "unexpected valued %d\n", i);
                exit(EX_SOFTWARE);
        }
        return 0;
}
_______________________________________________
libev mailing list
[email protected]
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev

Reply via email to