#include #include #include #include #include int fd[2]; int fdout[2]; char buf[256]; int r; enum {Infd, Outfd}; void main(int argc, char *argv[]) { if(pipe(fd) < 0 || pipe(fdout) < 0) sysfatal("pipe: %r"); print("cat /proc/%d/fd ", getpid()); switch(fork()){ case 0: print("/proc/%d/fd\n", getpid()); close(0); close(1); dup(fd[0], 0); dup(fd[1], 1); execl("/bin/rc", "rc", "-c", "bc", nil); sysfatal("ctrash"); default: print("current process\n"); // close(1); // dup(fdout[1], 1); Rd: if(r = read(0, buf, sizeof buf)){ buf[r] = 0; write(fd[Outfd], buf, r); sleep(20); } if(r = read(fd[0], buf, sizeof buf)){ buf[r] = 0; write(1, buf, r); } goto Rd; } print("done\n"); exits(nil); } // infd for prog -> infd for bc // outfd for bc -> outfd for prog