• Viernes 29 de Marzo de 2024, 16:53

Autor Tema:  C: pipeline  (Leído 1339 veces)

zany_666

  • Miembro activo
  • **
  • Mensajes: 29
  • Nacionalidad: es
    • Ver Perfil
C: pipeline
« en: Lunes 26 de Abril de 2010, 00:43 »
0
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 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!
Una imágen vale más que mil palabras, pero ocupa mucha más memoria...

zany_666

  • Miembro activo
  • **
  • Mensajes: 29
  • Nacionalidad: es
    • Ver Perfil
Re: C: pipeline
« Respuesta #1 en: Viernes 30 de Abril de 2010, 12:51 »
0
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!
Una imágen vale más que mil palabras, pero ocupa mucha más memoria...