xref: /relibc/tests/select.c (revision 54fb8b9b2bdd066cf95fba8da3d67b7cda39cbb8)
1 #include <fcntl.h>
2 #include <stdio.h>
3 #include <sys/select.h>
4 #include <unistd.h>
5 
6 #include "test_helpers.h"
7 
file_test(void)8 int file_test(void) {
9     int fd = open("select.c", 0, 0);
10     if (fd < 0) {
11         perror("open");
12         return -1;
13     }
14 
15     printf("Testing select on file\n");
16 
17     fd_set read;
18     FD_ZERO(&read);
19     FD_SET(fd, &read);
20 
21     printf("Is set before? %d\n", FD_ISSET(fd, &read));
22 
23     int nfds = select(fd + 1, &read, NULL, NULL, NULL);
24     if (nfds < 0) {
25         perror("select");
26         return 1;
27     }
28     printf("Amount of things ready: %d\n", nfds);
29 
30     printf("Is set after? %d\n", FD_ISSET(fd, &read));
31 
32     close(fd);
33 
34     return 0;
35 }
36 
pipe_test(void)37 int pipe_test(void) {
38     int pipefd[2];
39     if (pipe2(pipefd, O_NONBLOCK) < 0) {
40         perror("pipe");
41         return 1;
42     }
43 
44     char c = 'c';
45     if (write(pipefd[1], &c, sizeof(c)) < 0) {
46         perror("write");
47         return 1;
48     }
49 
50     printf("Testing select on pipe\n");
51 
52     fd_set read;
53     FD_ZERO(&read);
54     FD_SET(pipefd[0], &read);
55 
56     printf("Is set before? %d\n", FD_ISSET(pipefd[0], &read));
57 
58     int nfds = select(pipefd[0] + 1, &read, NULL, NULL, NULL);
59     if (nfds < 0) {
60         perror("select");
61         return 1;
62     }
63     printf("Amount of things ready: %d\n", nfds);
64 
65     printf("Is set after? %d\n", FD_ISSET(pipefd[0], &read));
66 
67     close(pipefd[0]);
68     close(pipefd[1]);
69 
70     return 0;
71 }
72 
main(void)73 int main(void) {
74     if (file_test()) {
75         return 1;
76     }
77 
78     if (pipe_test()) {
79         return 1;
80     }
81 
82     return 0;
83 }
84