]> granicus.if.org Git - strace/blob - test/procpollable.c
a841af147c9eb3f118fe76b71567628bac7c64d4
[strace] / test / procpollable.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <signal.h>
4 #include <sys/procfs.h>
5 #include <sys/stropts.h>
6 #include <poll.h>
7
8 int main(int argc, char *argv[])
9 {
10         int pid;
11         char proc[32];
12         FILE *pfp;
13         struct pollfd pfd;
14
15         if ((pid = fork()) == 0) {
16                 pause();
17                 exit(0);
18         }
19
20         sprintf(proc, "/proc/%d", pid);
21
22         if ((pfp = fopen(proc, "r+")) == NULL)
23                 goto fail;
24
25         if (ioctl(fileno(pfp), PIOCSTOP, NULL) < 0)
26                 goto fail;
27
28         pfd.fd = fileno(pfp);
29         pfd.events = POLLPRI;
30
31         if (poll(&pfd, 1, 0) < 0)
32                 goto fail;
33
34         if (!(pfd.revents & POLLPRI))
35                 goto fail;
36
37         kill(pid, SIGKILL);
38         exit(0);
39 fail:
40         kill(pid, SIGKILL);
41         exit(1);
42 }