title: Pipe implementation
body: <p>I am trying to implement a linux shell that supports piping. I have already done simple commands, commands running in background, redirections, but piping is still missing.</p>
  
  <p>I have already read about it and seen some snippets of code, but still haven't been able to sort out a working solution.</p>
  
  <p>What I have so far:</p>
  
  <pre><code>int fd[2];
  
  pipe(fd);
  
  pid_t pid = fork();
  
  if (pid == -1)  
     return -1;  
  
  if (pid == 0)  
  {  
     close(fd[1]); //close write to pipe, in child
     execlp("cat", "cat", "names.txt", NULL);
  }
  
  else
  {
     close(fd[0]); //close read from pipe, in parent
     execlp("sort", "sort", NULL);
  }  
  </code></pre>
  
  <p>I am a novice programmer, as you can probably tell, and when I am programming something I don't know much about, this being obviously the case, I like to start with something really easy and concrete and then build from there. </p>
  
  <p>So, before being able to implement three and more different commands in pipeline, I would like to be able to compute "ls names.txt | sort" or something similiar, in which names.txt is a file of names alfabetically unordered.</p>
  
  <p>Updated code, but still doesn't work.</p>
  
  <p>Thanks.</p>