punto.c

Go to the documentation of this file.
00001 /* tarea.c */
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                 // hijo
00035                 else if ( ! pid ) {
00036                         
00037                         if ( (count=getvar("numlecturas")) == -1 ) {
00038                                 count=5;
00039                         }
00040                         
00041                         while ( count--) {
00042                                 read_debug(5);
00043                                 //exec("print.bin");
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 

Generated on Sun May 30 18:38:35 2004 for Routix OS by doxygen 1.3.6