jueves, 29 de septiembre de 2011

Practica 5

29 de Septiembre del 2011


#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= 32;

               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 hijo1 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=10;

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

}



Resultado del programa:




Nombre del Alumno: Raul Lopez Bautista

No hay comentarios:

Publicar un comentario