• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2   FUSE fselclient: FUSE select example client
3   Copyright (C) 2008       SUSE Linux Products GmbH
4   Copyright (C) 2008       Tejun Heo <teheo@suse.de>
5 
6   This program can be distributed under the terms of the GNU GPLv2.
7   See the file COPYING.
8 */
9 
10 /** @file
11  *
12  * This program tests the poll.c example file systsem.
13  *
14  * Compile with:
15  *
16  *      gcc -Wall poll_client.c -o poll_client
17  *
18  * ## Source code ##
19  * \include poll_client.c
20  */
21 
22 #include <config.h>
23 
24 #include <sys/select.h>
25 #include <sys/time.h>
26 #include <sys/types.h>
27 #include <sys/stat.h>
28 #include <fcntl.h>
29 #include <unistd.h>
30 #include <ctype.h>
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <errno.h>
34 
35 #define FSEL_FILES	16
36 
main(void)37 int main(void)
38 {
39 	static const char hex_map[FSEL_FILES] = "0123456789ABCDEF";
40 	int fds[FSEL_FILES];
41 	int i, nfds, tries;
42 
43 	for (i = 0; i < FSEL_FILES; i++) {
44 		char name[] = { hex_map[i], '\0' };
45 		fds[i] = open(name, O_RDONLY);
46 		if (fds[i] < 0) {
47 			perror("open");
48 			return 1;
49 		}
50 	}
51 	nfds = fds[FSEL_FILES - 1] + 1;
52 
53 	for(tries=0; tries < 16; tries++) {
54 		static char buf[4096];
55 		fd_set rfds;
56 		int rc;
57 
58 		FD_ZERO(&rfds);
59 		for (i = 0; i < FSEL_FILES; i++)
60 			FD_SET(fds[i], &rfds);
61 
62 		rc = select(nfds, &rfds, NULL, NULL, NULL);
63 
64 		if (rc < 0) {
65 			perror("select");
66 			return 1;
67 		}
68 
69 		for (i = 0; i < FSEL_FILES; i++) {
70 			if (!FD_ISSET(fds[i], &rfds)) {
71 				printf("_:   ");
72 				continue;
73 			}
74 			printf("%X:", i);
75 			rc = read(fds[i], buf, sizeof(buf));
76 			if (rc < 0) {
77 				perror("read");
78 				return 1;
79 			}
80 			printf("%02d ", rc);
81 		}
82 		printf("\n");
83 	}
84 	return 0;
85 }
86