/* FUSE fselclient: FUSE select example client Copyright (C) 2008 SUSE Linux Products GmbH Copyright (C) 2008 Tejun Heo This program can be distributed under the terms of the GNU GPL. See the file COPYING. */ /** @file * @tableofcontents * * fselclient.c - FUSE fselclient: FUSE select example client * * \section section_compile compiling this example * * gcc -Wall fselclient.c -o fselclient * * \section section_source the complete source * \include fselclient.c */ #include #include #include #include #include #include #include #include #include #include #include #define FSEL_FILES 16 int main(void) { static const char hex_map[FSEL_FILES] = "0123456789ABCDEF"; int fds[FSEL_FILES]; int i, nfds; for (i = 0; i < FSEL_FILES; i++) { char name[] = { hex_map[i], '\0' }; fds[i] = open(name, O_RDONLY); if (fds[i] < 0) { perror("open"); return 1; } } nfds = fds[FSEL_FILES - 1] + 1; while (1) { static char buf[4096]; fd_set rfds; int rc; FD_ZERO(&rfds); for (i = 0; i < FSEL_FILES; i++) FD_SET(fds[i], &rfds); rc = select(nfds, &rfds, NULL, NULL, NULL); if (rc < 0) { perror("select"); return 1; } for (i = 0; i < FSEL_FILES; i++) { if (!FD_ISSET(fds[i], &rfds)) { printf("_: "); continue; } printf("%X:", i); rc = read(fds[i], buf, sizeof(buf)); if (rc < 0) { perror("read"); return 1; } printf("%02d ", rc); } printf("\n"); } }