
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define lectura 0
#define escritura 1
int aleatorio(void)
{
int semilla = (int)time(NULL);
srand(semilla);
}
int hijo(int tube1[2], int tube2[2]){
int ret;
int minumero;
int numbytes;
char buf[256]={};
ret = fork();
if (ret == 0){
/*Tratamiento del nieto*/
//minumero = aleatorio();
minumero= 10;
printf("%d\n",minumero);
sprintf(buf,"%d",minumero);
if( write (tube1[escritura],buf, sizeof(buf)) == -1){
perror("Fallo write nieto");
exit(EXIT_FAILURE);
}
numbytes = read(tube2[lectura],buf,sizeof(buf));
if (numbytes == -1){
perror("Fallo read nieto");
exit(EXIT_FAILURE);
}
close(tube1[escritura]);
close(tube2[lectura]);
printf("Soy hijo2 con PID=%d, mi número aleatorio es %d y el del otro proceso es %s\n",getpid(),minumero,buf);
}
else if (ret > 0){
/*Tratamiento del padre*/
//minumero = aleatorio();
minumero=32;
printf("%d\n",minumero);
sprintf(buf,"%d",minumero);
if( write (tube2[escritura],buf, sizeof(buf)) == -1){
perror("Fallo write padre");
exit(EXIT_FAILURE);
}
numbytes = read(tube1[lectura],buf,sizeof(buf));
if (numbytes == -1){
perror("Fallo read padre");
exit(EXIT_FAILURE);
}
close(tube1[lectura]);
close(tube2[escritura]);
printf("Soy hijo1 con PID=%d, mi número aleatorio es %d y el del otro proceso es %s\n",getpid(),minumero,buf);
}
else if (ret == -1){
/*Error*/
perror("Fallo en el segundo fork");
exit(EXIT_FAILURE);
}
}
int main (void){
int ret;
int ret2;
int tube1[2];
int tube2[2];
int temp;
int e;
char buf[256]={};
if (pipe(tube1) == -1){
perror("Fallo pipe1");
exit(EXIT_FAILURE);
}
if (pipe(tube2) == -1){
perror("Fallo pipe2");
exit(EXIT_FAILURE);
}
ret = fork();
if (ret == 0){
/*tratamiento del hijo*/
hijo(tube1,tube2);
}
else if( ret > 0){
/*tratamiento del abuelo*/
}
else if (ret == -1){
/*error*/
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);
}
}
No hay comentarios:
Publicar un comentario