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 kill(getppid(), SIGUSR1);
00018 sigset_t mascara;
00019 sigfillset(&mascara);
00020 sigdelset(&mascara, 2);
00021
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
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
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
00065 }
00066