/*
 *	Ejemplo de uso de pipes en UNIX
 *	Por: Oscar Medina Duarte
 *  www.medina-web.com
 */

#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>


void main(){
	int filedes[2]; /* Descriptor de archivo doble */
	int cpid;
	char cadena1[] = "Informacion pasada por el pipe\n";
	char entrada[255];
	
	printf("Ejemplo de uso de pipes.\n");
	printf("\nProceso padre pid: %i : ", getpid());

	/* Crear pipe */
	
	pipe(filedes);
	
	/* filedes[0] es para lectura,
	   filedes[1] es para escritura
	*/
	
	/* Bifurcar proceso */
	cpid = fork();
	
	switch(cpid){
	case -1:{
		printf("Oups !, algo salio mal...\n");
	}
	case 0:{
		printf("Hijo enviando : %s\n", cadena1);
		write(filedes[1],cadena1, strlen(cadena1));
		exit(0);
		
	}
	default:{
		printf("Hijo creado con el pid : %i\n",cpid);
		printf("Preparado para recibir cadena del hijo por el pipe\n");
		close(filedes[1]);
		read(filedes[0],entrada, sizeof(entrada));
		printf("Datos leidos del pipe : %s\n", entrada);
		exit(0);
		
	}
	}

}
