sábado, 1 de octubre de 2011

PRACTICA5

#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);
    }
 
}