/*
 * Exemplo de uso de pipes.
 * cmd1 | cmd2 args2
 *
 * Nesta versão simplificada, cmd1 não pode
 * receber argumentos.
 */

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
   
int  main (int argc, char** argv) {
  int mypipe[2];
  
  if (argc < 3) exit(-1);
  
  pipe (mypipe);   /* Cria o pipe mypipe.
		      mypipe[0] - leitura
		      mypipe[1] - escrita			 
		   */
     
  if (fork() != 0)
    if (fork() != 0) {/* Pai (shell) */
      close (mypipe[1]); 
      wait(NULL);
      wait(NULL);
    } else {
      close (mypipe[1]);    /* CMD 2 */
      dup2(mypipe[0], 0);		
      execve (argv[2], &argv[2],0);
      printf("Erro em cmd2\n" );
   }
  else {
    close (mypipe[0]);     /* CMD 1 */
    dup2(mypipe[1], 1);
    close(mypipe[1]);
    argv[2] = NULL; /* cmd2 não é necessário */
    execve(argv[1], &argv[1], 0);
    printf("Erro em cmd1\n");
  }
  return 0;
}