some cleanups still no working
[svn42.git] / dart / ttyread.c
index beb8856..65f0203 100644 (file)
@@ -97,7 +97,7 @@ int main(int argc, char* argv[])
     return 1;
   }
 
-  int fd = open(argv[1], O_RDONLY);
+  int fd = open(argv[1], O_RDONLY | O_NONBLOCK | O_NOCTTY);
   if(fd < 0) {
     perror("open()");
     return 2;
@@ -105,8 +105,22 @@ int main(int argc, char* argv[])
 
   if(setup_tty(fd)) return 3;
 
+  fd_set rfds, efds;
   char buf[100];
   for(;;) {
+    FD_ZERO(&rfds);
+    FD_SET(fd, &rfds);
+    FD_ZERO(&efds);
+    FD_SET(1, &efds);
+
+    int s = select(fd+1, &rfds, NULL, &efds, NULL);
+    if(s < 0) {
+      perror("select()");
+      return s;
+    }
+    if(FD_ISSET(1, &efds)) return 0;
+    if(!FD_ISSET(fd, &rfds)) continue;
+
     ssize_t r = read(fd, buf, sizeof(buf));
     if(r <= 0) {
       perror("read()");