#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
#define READ 0
#define WRITE 1

int main(int argc, char *argv[])
{
     int i, p[2], pid, lineno = 1, nchars;
     char line[81];
     
     line[0] = '\0';
     if (argc != 2) {
          fprintf(stderr, "Usage: tunnel <p1>\n");
          exit(1);
     }
     
     if (pipe(p) != 0) {
          fprintf(stderr, "Error in Creating Pipe\n");
          exit(1);
     }
     
     if ((pid = fork()) == 0) {
          close(p[READ]);
          
          if (dup2(p[WRITE], 1) < 0) {
               fprintf(stderr, "Failed to set up the tunnel\n");
               exit(2);
          }
          execlp(argv[1], argv[1], NULL);
          fprintf(stderr, "Error in running %s\n", argv[1]);
     } else {
          close(p[WRITE]);
          while ((nchars = read(p[READ], line, 80)) > 0) {
               write(1, line, nchars);
          }
          close(p[READ]);
          
          waitpid(pid, NULL, 0);
     }
     
     exit(0);
}
