epoll()

I've tried all the examples in the man pages and several of my own version of using epoll on a '/sys/class/gpio/gpioXX/value' file and none of it seems to work.  I do have support compiled into my kernel.  Does anyone have a small working example for me to try?

    int n;

    int epfd = epoll_create(1);

    int fd = open("/sys/class/gpio/gpio56/value", O_RDONLY );//| O_NONBLOCK);

    printf("open returned %d: %s\n", fd, strerror(errno));

    if(fd > 0) {

        char buf = 0;


        struct epoll_event ev;

        struct epoll_event events;

        ev.events = EPOLLPRI;

        ev.data.fd = fd;


        n = epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &ev);

        printf("epoll_ctl returned %d: %s\n", n, strerror(errno));


        while(1) {

               n = epoll_wait(epfd, &events, 1, -1);

            printf("epoll returned %d: %s\n", n, strerror(errno));


            if(n > 0) {

                n = lseek(events.data.fd, 0, SEEK_SET);

                printf("seek %d bytes: %s\n", n, strerror(errno));

                while(n = read(events.data.fd, &buf, 1)){

                    printf("read %d bytes: %s\n", n, strerror(errno));

                    printf("buf = 0x%x\n", buf);

                }

                printf("epoll_ctl returned %d: %s\n", n, strerror(errno));

            }

        }

    }