#include <stdio.h>
#include <err.h>
#include <unistd.h>

static char buf[65536];

int main()
{
       pid_t child;
       int status;
       int p[2],q[2];
       int i;
       char ch;

       if (pipe(p) == -1)
               err(1,"pipe");
       if (pipe(q) == -1)
               err(1,"pipe");

       child = fork();
       if (child == -1)
               err(1,"fork");

       if (child == 0) {
               close(p[0]);
               close(q[1]);
               i = 0;
               while (i++<1000000 && read(0,buf,sizeof(buf)) == sizeof(buf)) {
                       write(p[1],&ch,1);
                       if (read(q[0],&ch,1) != 1)
                               break;
               }
               _exit(0);
       }
       close(p[1]);
       close(q[0]);

       while (read(p[0],&ch,1) == 1) {
               write(q[1],&ch,1);
       }

       wait(&status);

       return 0;
}