diff options
Diffstat (limited to 'test/procpollable.c')
-rw-r--r-- | test/procpollable.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/test/procpollable.c b/test/procpollable.c new file mode 100644 index 0000000..fc599b5 --- /dev/null +++ b/test/procpollable.c @@ -0,0 +1,33 @@ +#include <stdio.h> +#include <signal.h> +#include <sys/procfs.h> +#include <sys/stropts.h> +#include <poll.h> +main() +{ + int pid; + char proc[32]; + FILE *pfp; + struct pollfd pfd; + + if ((pid = fork()) == 0) { + pause(); + exit(0); + } + sprintf(proc, "/proc/%d", pid); + if ((pfp = fopen(proc, "r+")) == NULL) + goto fail; + if (ioctl(fileno(pfp), PIOCSTOP, NULL) < 0) + goto fail; + pfd.fd = fileno(pfp); + pfd.events = POLLPRI; + if (poll(&pfd, 1, 0) < 0) + goto fail; + if (!(pfd.revents & POLLPRI)) + goto fail; + kill(pid, SIGKILL); + exit(0); +fail: + kill(pid, SIGKILL); + exit(1); +} |