SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: zany_666 en Lunes 26 de Abril de 2010, 00:43

Título: C: pipeline
Publicado por: zany_666 en Lunes 26 de Abril de 2010, 00:43
Hola, quería preguntaros haber si me podeis dar una idea de como implementar un pipeline. He visto en este foro un tema parecido: viewtopic.php?f=18&t=41996&p=151702&hilit=pipe#p151702 (http://www.foros.solocodigo.com/viewtopic.php?f=18&t=41996&p=151702&hilit=pipe#p151702" onclick="window.open(this.href);return false;) que es más o menos lo que quiero hacer con mi programa.
He usado fork() para crear un hijo y un pipe() para comunicarlo con el padre. De momento, he conseguido ejecutar dos instrucciones, por ejemplo, un

Código: Text
  1. ls | wc
  2.  

y me ha funcionado bien. Ahora lo que quería hacer es implementarlo de tal forma que me admita más argumentos, conectado hijos mediante tuberías. Había pensado en hacer un for() para crear varios hijos y que el último en ejecutar un comando sea el padre. Voy por buen camino? Lo he intentado con un solo pipe(), debería crearme alguno más?
Gracias!
Título: Re: C: pipeline
Publicado por: zany_666 en Viernes 30 de Abril de 2010, 12:51
He encontrado una solución, crear un array dinámico de pipe, pero me da algún fallito, y lo he probado de estas dos formas:
Código: C
  1. arrayPipe = malloc(sizeof(int *) * N);
  2. for(i=0;i<N;i++){
  3.      arrayPipe[i] = malloc(sizeof(int) * 2); //Dos posiciones fijas
  4. }
  5.  
Este me da un error al crear el pipe():
Error al crear el pipe
: Success

Y acaba.
Código: C
  1.  
  2. arrayPipe = malloc(N * sizeof *arrayPipe);
  3. for(i=0;i<N;i++){
  4.     arrayPipe[i] = malloc(2 * sizeof *arrayPipe[i]); //Error aqui
  5. }
  6.  
Este me da un error de fallo de segmentación desde el principio, sin llegar a ejecutar la instrucción de malloc.
El pipe me lo creo así (dentro del bucle for) en ambos casos:
Código: C
  1. valor=pipe(arrayPipe[i]);
  2.  
Haber si me podéis ayudar, gracias!