This source file includes following definitions.
- main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <config.h>
20
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <sys/select.h>
24 #include <sys/time.h>
25 #include <unistd.h>
26
27 #include "macros.h"
28
29 int
30 main (void)
31 {
32 printf ("Applying select() from standard input. Press Ctrl-C to abort.\n");
33 for (;;)
34 {
35 struct timeval before;
36 struct timeval after;
37 unsigned long spent_usec;
38 fd_set readfds;
39 struct timeval timeout;
40 int ret;
41
42 gettimeofday (&before, NULL);
43
44 FD_ZERO (&readfds);
45 FD_SET (0, &readfds);
46 timeout.tv_sec = 0;
47 timeout.tv_usec = 500000;
48 ret = select (1, &readfds, NULL, NULL, &timeout);
49
50 gettimeofday (&after, NULL);
51 spent_usec = (after.tv_sec - before.tv_sec) * 1000000
52 + after.tv_usec - before.tv_usec;
53
54 if (ret < 0)
55 {
56 perror ("select failed");
57 exit (1);
58 }
59 if ((ret == 0) != ! FD_ISSET (0, &readfds))
60 {
61 fprintf (stderr, "incorrect return value\n");
62 exit (1);
63 }
64 if (ret == 0)
65 {
66 if (spent_usec < 250000)
67 {
68 fprintf (stderr, "returned too early\n");
69 exit (1);
70 }
71
72 printf (".");
73 ASSERT (fflush (stdout) == 0);
74 }
75 else
76 {
77 char c;
78
79 printf ("Input available! Trying to read 1 byte...\n");
80 ASSERT (read (0, &c, 1) == 1);
81 }
82 }
83 }