From 57c74154571d14dcebb92ad0f9ff6369728163da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Wed, 14 Jul 2021 11:08:56 +0200 Subject: Add rtty.c --- rtty.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 rtty.c diff --git a/rtty.c b/rtty.c new file mode 100644 index 0000000..766912f --- /dev/null +++ b/rtty.c @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +#include + +#define MAXBUF 2048 + +int +main() +{ + char bufin[MAXBUF], bufout[MAXBUF]; + fd_set rfds0, rfds1; + int c, fdin, fdout, flags, i, nin, nout, state; + struct timeval tv; + + if(!(fdin = open("/var/tmp/r.in", O_WRONLY))) + err(1, "open"); + if(!(fdout = open("/var/tmp/r.out", O_RDONLY))) + err(1, "open"); + + flags = fcntl(0, F_GETFL, 0); + flags |= O_NONBLOCK; + fcntl(0, F_SETFL, flags); + + FD_ZERO(&rfds0); + FD_ZERO(&rfds1); + + tv.tv_sec = 0; + tv.tv_usec = 1; + + for(;;){ + /* Read from named pipe (out) and print on standard in. */ + FD_SET(fdout, &rfds1); + if(select(fdout+1, &rfds1, NULL, NULL, &tv) > 0){ + nout = read(fdout, bufout, MAXBUF); + bufout[nout] = 0; + + /* Ignore repetition of typed command. */ + if(strcmp(bufout, bufin) == 0) + bufin[0] = 0; + else{ + printf("%s", bufout); + fflush(stdout); + } + } + + /* Read from standard in and print on named pipe (in). */ + FD_SET(0, &rfds0); + if(select(0+1, &rfds0, NULL, NULL, &tv) > 0){ + nout = read(0, bufin, MAXBUF); + bufin[nout] = 0; + dprintf(fdin, "%s", bufin); + fflush(stdout); + } + } + +} -- cgit v1.2.3