#include #include #include #include #include #define MAXBUF 2048 fd_set rfds0, rfds1; struct timeval timeout; int main() { char buf[MAXBUF]; FILE *in, *out; int c, i, n, ofd, state; if(!(in = fopen("/var/tmp/r.in", "w"))) err(1, "fopen"); if(!(out = fopen("/var/tmp/r.out", "r"))) err(1, "fopen"); ofd = fileno(out); FD_ZERO(&rfds0); FD_SET(0, &rfds0); FD_ZERO(&rfds1); FD_SET(ofd, &rfds1); timeout.tv_sec = 1; timeout.tv_usec = 0; for(state = 0; printf("."); state = !state) switch(state){ case 0: if(!select(0+1, &rfds0, NULL, NULL, &timeout)) break; printf("0 ready\n"); break; case 1: if(!select(ofd+1, &rfds1, NULL, NULL, &timeout)) break; printf("1 ready\n"); break; } #if 0 for(;;){ printf("."); FD_ZERO(&read_set); FD_SET(0, &read_set); FD_SET(ofd, &read_set); switch(select(ofd+1, &read_set, NULL, NULL, &timeout)){ case -1: err(1, "select"); break; case 0: break; default: if(FD_ISSET(0, &read_set)){ fgets(buf, MAXBUF, stdin); buf[strcspn(buf, "\n")] = 0; printf("in: %s\n", buf); }else if(FD_ISSET(ofd, &read_set)){ fgets(buf, MAXBUF, stdin); buf[strcspn(buf, "\n")] = 0; printf("out: %s\n", buf); }else{ printf("?\n"); } } } #endif }