jueves, 29 de septiembre de 2011

Practica num Aleatorios

#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 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