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