title: Trying to implement unnamed pipe program in Ubuntu
body: <p>I'm trying to make a program that will simulate unnamed pipes, exactly as is possible to do in the terminal in Ubuntu. The program recieves file names and commands to execute for each file. I want to string the programs' input/output through pipes such that the first program's input will be std.in, and its' output will be the second program's input and so forth. Here's what I have so far:</p>
  
  <pre><code>void np_exec(char* cmd, char** argv)
  {
  
  
      while(*(++argv) != NULL)
      {
              int pid = fork(); //parent executes
              if(pid &lt; 0)
              {
                      printf("Error forking")
                      exit(1);
              }
  
              if(pid != 0) // parent
                      if (execvp(cmd, *argv) == -1)
                              perror("execvp failed");
  
                      //somewhere here i want to pipe input to output
  
      }
  }
  
  int main(int argc, char** argv)
  {
      assert(strcmp(argv[argc-1], "-"));
  
      int i;
      for (i = 1; i &lt; argc; ++i) {
              if (!strcmp(argv[i], "-"))
              {
                      argv[i] = NULL;
                      np_exec(argv[1], &amp;argv[1]);
                      argv = &amp;argv[i];
                      argc -= i;
                      i = 0;
              }
      }
  
      char* args[argc];
      args[argc-1] = NULL;
  
      for (i = 1; i &lt; argc; ++i) {
              args[i-1] = argv[i];
      }
  
      if (execvp(args[0], args) == -1)
              perror("execvp failed");
      return;
  }
  }
  </code></pre>
  
  <p>As you can see, I'm struggling with the pipe implementation. Also, is there a way to test if this program works? Is there a command to write to a file (which will then hopefully carry on to the others?)</p>