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