jueves, 22 de septiembre de 2011

PRACTICA 3 "Configuración de procesos en C"

Ejercicio #1

              Padre
         /       |           \
Hijo1      Hijo2      Hijo3

Código
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<errno.h>
#define NUM_HIJOS 3   
int main(void)
{
int ret, i;
for(i=0; i<NUM_HIJOS; i++){
ret=fork();
if(ret==0){
printf("Soy el hijo %d, mi padre es PID: %d , Yo soy el PID= %d\n\n", i, getppid(), getpid());
}else if(ret> 0){
ret=wait(NULL);

while(ret>0){
ret=wait(NULL);
}
if(ret == -1 && errno != ECHILD){
perror("falla en wait");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
else if (ret == -1){
perror("falla en fork");
exit(EXIT_FAILURE);
}
}
}


Ejercicio #2


      Padre
    /          \
Hijo1      Hijo2    
                   |
               Hijo3

Código
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<errno.h> //Define macros que presenta un informe de error a traves de codigos
#define NUM_HIJOS 2
int main(void)
{
    int ret, i;
    for(i=1; i<=NUM_HIJOS; i++){
        ret=fork();
        if(ret==0){
        printf("Soy el hijo %d, mi padre es PID: %d , Yo soy el PID= %d\n\n", i, getppid(), getpid());
        if(i==2){
            printf("Soy el hijo 3 %d\n\n", getpid());
        }       
        }    else if(ret> 0){
                ret=wait(NULL);
    while(ret>0){   
        ret=wait(NULL);
    }
    if(ret == -1 && errno != ECHILD){       
        perror("falla en wait");
        exit(EXIT_FAILURE);
    }
    exit(EXIT_SUCCESS);
    }
    else if (ret == -1){
    perror("falla en fork");
    exit(EXIT_FAILURE);
    }
    }
}

No hay comentarios:

Publicar un comentario