tarea.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         sigset_t mascara;
00018         sigfillset(&mascara);
00019         sigdelset(&mascara, 2);
00020 //      sigprocmask(SIG_SETMASK,&mascara ,NULL);
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 //      signal(3, handler);
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         // Se puede setear una máscara desde dentro de un handler ????
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         //_debug();
00064 }
00065 

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