#include <stdio.h>
#include <stdlib.h>
#define N     3
#define READ  0
#define WRITE 1

main() {
  int a[N][N]={{1,1,1},{2,2,2},{3,3,3}};
  int i, somaLin, somaGlo=0, fd[2];

  if (pipe(fd) == -1)
    msg_erro("pipe() falhou!");    
  for (i=0; i<N; i++)                   
    if(fork() == 0) {             /* filho */   
      somaLin= soma_vector(a[i]);
      close(fd[READ]);
      write(fd[WRITE], &somaLin, sizeof(int));
      exit(0);
    }                                       
  close(fd[WRITE]);               /* pai */ 
  for (i=0; i<N; i++) {                     
    read(fd[READ], &somaLin, sizeof(int));  
    somaGlo += somaLin;                     
  }                                         
  close(fd[READ]); 
  printf("soma da matriz: %d\n", somaGlo);   }

// Definição da função auxiliar soma_vector 
int soma_vector(int v[]) {                  
   int i, soma=0;                           

   for (i=0; i<N; i++)  soma += v[i];       
   return soma;                             
}                                           

void msg_erro(char *msg) {
  printf("%s\n", msg);
}
