00001
00002 #include "stdarg.h"
00003 #include <sys/types.h>
00004 #include <lib/routix.h>
00005 #include <routix.h>
00006 #include <string.h>
00007 #include <signal.h>
00008
00009 void catchear_hijos(int signo);
00010
00011 int hijos;
00012
00013 int main (void)
00014 {
00015
00016 int pid;
00017 int count;
00018
00019 if ( (count=hijos=getvar("numhijos")) == -1 ) {
00020 count=hijos=5;
00021 }
00022
00023
00024
00025 signal(SIGCHLD, catchear_hijos);
00026
00027 while ( count-- ) {
00028
00029 if ( (pid=fork()) == -1 ) {
00030 perror("error al forkear");
00031 exit(1);
00032 }
00033
00034
00035 else if ( ! pid ) {
00036
00037 if ( (count=getvar("numlecturas")) == -1 ) {
00038 count=5;
00039 }
00040
00041 while ( count--) {
00042 read_debug(5);
00043
00044 }
00045
00046 exit(0);
00047 }
00048
00049 }
00050
00051 while ( hijos ) ;
00052
00053 printf("todos los hijos terminaron correctamente\n");
00054
00055 exit(0);
00056
00057 }
00058
00059
00060
00061
00062 void catchear_hijos(int signo)
00063 {
00064 if (signo!=SIGCHLD) {
00065 printf("DEBERIA HABER RECIBIDO SIGCHLD y recibi: %d\n", signo);
00066 exit(-1);
00067 }
00068
00069 int value;
00070
00071 hijos--;
00072 wait(&value);
00073
00074 }
00075