aboutsummaryrefslogtreecommitdiff
path: root/r1.c
diff options
context:
space:
mode:
Diffstat (limited to 'r1.c')
-rw-r--r--r1.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/r1.c b/r1.c
new file mode 100644
index 0000000..d2c0ec5
--- /dev/null
+++ b/r1.c
@@ -0,0 +1,76 @@
+#include <err.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/select.h>
+
+#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
+
+}