#include #include #include #include #include #include #define EV_FMT "\177\020" \ "b\000" "EV_ADD" "\0" \ "b\001" "EV_DELETE" "\0" \ "b\002" "EV_ENABLE" "\0" \ "b\003" "EV_DISABLE" "\0" \ "b\004" "EV_ONESHOT" "\0" \ "b\005" "EV_CLEAR" "\0" \ "b\006" "EV_RECEIPT" "\0" \ "b\007" "EV_DISPATCH" "\0" \ "b\015" "EV_FLAG1" "\0" \ "b\016" "EV_ERROR" "\0" \ "b\017" "EV_EOF" "\0" \ "" int main(void) { int kq, sock[2]; struct kevent ev; char buf[256]; if ((kq = kqueue()) == -1) err(1, "kqueue"); if (socketpair(AF_UNIX, SOCK_STREAM, 0, sock) == -1) err(1, "socketpair"); EV_SET(&ev, sock[1], EVFILT_READ, EV_ADD|EV_ENABLE, 0, 0, 0); if (kevent(kq, &ev, 1, NULL, 0, &(struct timespec){0,0}) == -1) err(1, "kevent"); if (shutdown(sock[0], SHUT_WR) == -1) err(1, "shutdown"); if (kevent(kq, NULL, 0, &ev, 1, &(struct timespec){0,0}) == -1) err(1, "kevent"); snprintb(buf, sizeof(buf), EV_FMT, ev.flags); printf("ident=%llu\n", (long long)ev.ident); printf("filter=%llu\n", (long long)ev.filter); printf("flags=%s\n", buf); printf("fflags=0x%llx\n", (long long)ev.fflags); printf("data=%llu\n", (long long)ev.data); printf("data=%llu\n", (long long)ev.udata); fflush(stdout); return ferror(stdout); }