#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define lectura 0
#define escritura 1
int aleatorio(void)
{
int semilla = (int)time(NULL);
srand(semilla);
}
int hijo(int tub1[2], int tub2[2]){
int ret;
int mi_num;
int nu_byte;
char buf[256]={};
ret = fork();
if (ret == 0){
/*Tratamiento del nieto*/
//minumero = aleatorio();
mi_num= 10;
printf("%d\n",mi_num);
sprintf(buf,"%d",mi_num);
if( write (tub1[escritura],buf, sizeof(buf)) == -1){
perror("Fallo write nieto");
exit(EXIT_FAILURE);
}
nu_byte = read(tub2[lectura],buf,sizeof(buf));
if (nu_byte == -1){
perror("Fallo read nieto");
exit(EXIT_FAILURE);
}
close(tub1[escritura]);
close(tub2[lectura]);
printf("Soy hijo1 con PID=%d, mi numero aleatorio es %d y el del otro proceso es %s\n\n",getpid(),mi_num,buf);
}
else if (ret > 0){
/*Tratamiento del padre*/
//minumero = aleatorio();
mi_num=12;
printf("%d\n",mi_num);
sprintf(buf,"%d",mi_num);
if( write (tub2[escritura],buf, sizeof(buf)) == -1){
perror("Fallo write padre");
exit(EXIT_FAILURE);
}
nu_byte = read(tub1[lectura],buf,sizeof(buf));
if (nu_byte == -1){
perror("Fallo read padre");
exit(EXIT_FAILURE);
}
close(tub1[lectura]);
close(tub2[escritura]);
printf("Soy hijo2 con PID=%d, mi numero aleatorio es %d y el del otro proceso es %s\n\n",getpid(),mi_num,buf);
}
else if (ret == -1){
perror("Fallo en el segundo fork");
exit(EXIT_FAILURE);
}
}
int main (void){
int ret;
int ret2;
int tub1[2];
int tub2[2];
int temp;
int e;
char buf[256]={};
if (pipe(tub1) == -1){
perror("Fallo pipe1");
exit(EXIT_FAILURE);
}
if (pipe(tub2) == -1){
perror("Fallo pipe2");
exit(EXIT_FAILURE);
}
ret = fork();
if (ret == 0){
hijo(tub1,tub2);
}
else if( ret > 0){
}
else if (ret == -1){
perror("Fallo en fork");
exit(EXIT_FAILURE);
}
ret = wait (NULL);
while (ret > 0){
ret = wait(NULL);
}
if (ret == -1 && errno != ECHILD){
perror("Fallo en wait");
exit (EXIT_FAILURE);
}
}