stress1a.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 handler(int);
00010 void handler1(int signo);
00011 long get_esp(void);
00012 
00013 int sig = 0;
00014  
00015 int main (void)
00016 {
00017         kill(getppid(), SIGUSR1);
00018         sigset_t mascara;
00019         sigfillset(&mascara);
00020         sigdelset(&mascara, 2);
00021 //      sigprocmask(SIG_SETMASK,&mascara ,NULL);
00022 
00023         sigemptyset(&mascara);
00024         sigaddset(&mascara, 4);
00025         struct sigaction sig1;
00026         sig1.sa_handler = handler;
00027         sig1.sa_mask = mascara;
00028         sigaction (3, &sig1, NULL);
00029          
00030         int valor = 0xabcd;
00031 //      signal(3, handler);
00032         signal(4, handler1);
00033         signal(2, handler1);
00034         printf("Valor antes de senales: 0x%x\n", valor);
00035         printf("Tarea.bin: Durmiendo en un while...\n");
00036         __asm__ __volatile__ ("mov $0x11111111,%eax ; mov $0x22222222,%ebx ; mov $0x33333333,%ecx ; mov $0x44444444,%edx ; mov $0x55555555,%edi ; mov $0x66666666,%esi");
00037         while(sig!=4);
00038         printf("Valor despues de senales: 0x%x\n", valor);
00039         
00040         return 0;
00041 }
00042 
00043 void handler(int signo)
00044 {
00045         sig = signo;
00046         printf("handler 3 de tarea.bin: Se recibio la senal: %d\t PID: %d\n", signo, getpid());
00047         int i;
00048         for (i=0 ; i<0x5fffff; i++);
00049         printf("saliendo del handler 3\n");
00050         
00051 }
00052 
00053 void handler1(int signo)
00054 {
00055         // Se puede setear una máscara desde dentro de un handler ????
00056         printf("handler1 de tarea.bin: Se recibio la senal: %d\t PID: %d\n", signo, getpid());
00057         if (signo==2) {
00058                 sigset_t mascara;
00059                 sigemptyset(&mascara);
00060                 sigprocmask(SIG_SETMASK, &mascara, NULL);
00061         }
00062         
00063         sig = signo;
00064         //_debug();
00065 }
00066 

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