#include <unistd.h>
#include <stdlib.h>
#include <poll.h>
#include <stdio.h>

int main() {
    int fd[2], rfd, wfd;
    int pid;

    if(pipe(fd) < 0) {
        perror("pipe"); exit(-1);
    }

    rfd = fd[0]; wfd = fd[1];
    pid = fork();
    if(pid < 0) {
        perror("fork"); exit(-1);
    } else if(pid) {
        /* Parent */
        close(rfd);
        struct pollfd pollfd = {wfd, POLLHUP, 0};
        poll(&pollfd, 1, 6000);
        printf("poll() returned ");
#define CHECK(x) if(pollfd.revents&x) {printf("%s ", #x);}
        CHECK(POLLIN);
        CHECK(POLLPRI);
        CHECK(POLLOUT);
        CHECK(POLLERR);
        CHECK(POLLHUP);
        CHECK(POLLNVAL);
        printf("\n");
    } else {
        /* Child */
        close(wfd);
        usleep(1000000);
        close(rfd);
    }
}
