version 1.2, 2016/03/30 09:20:40 |
version 1.4, 2016/03/31 03:22:55 |
|
|
/* $OpenXM: OpenXM/src/kan96xx/plugin/mysig.c,v 1.1 2016/03/30 08:25:43 takayama Exp $ */ |
/* $OpenXM: OpenXM/src/kan96xx/plugin/mysig.c,v 1.3 2016/03/30 21:34:03 takayama Exp $ */ |
#include <stdio.h> |
#include <stdio.h> |
#include <signal.h> |
#include <signal.h> |
#include <unistd.h> |
#include <unistd.h> |
|
|
#include <string.h> |
#include <string.h> |
#include "mysig.h" |
#include "mysig.h" |
|
|
|
static void *Old_handler; |
/* |
/* |
sigset SIGINT, SIGCHLD, SIGUSR1 |
sigset SIGINT, SIGCHLD, SIGUSR1 |
*/ |
*/ |
Line 34 int block_signal(int sigset[]) { |
|
Line 35 int block_signal(int sigset[]) { |
|
int set_signal(int sig,void (*handler)(int m)) { |
int set_signal(int sig,void (*handler)(int m)) { |
struct sigaction act; |
struct sigaction act; |
struct sigaction oldact; |
struct sigaction oldact; |
|
int val; |
act.sa_handler=handler; |
act.sa_handler=handler; |
act.sa_flags=0; |
act.sa_flags=0; |
act.sa_flags |= SA_RESTART; |
act.sa_flags |= SA_RESTART; |
sigemptyset(&act.sa_mask); |
sigemptyset(&act.sa_mask); |
return(sigaction(sig,&act,&oldact)); |
val=sigaction(sig,&act,&oldact); |
|
Old_handler = oldact.sa_handler; |
|
return(val); |
|
} |
|
/* |
|
my own emulation of signal for portability. |
|
*/ |
|
void *mysignal(int sig,void (*handler)(int m)) { |
|
int sigset[2]; |
|
if (handler == SIG_IGN) { |
|
/* sigset[0] = sig; sigset[1]=0; |
|
block_signal(sigset); |
|
return(SIG_IGN);*/ |
|
return(signal(sig,handler)); |
|
}else if (handler == SIG_DFL) { |
|
return(signal(sig,handler)); |
|
} |
|
/* on unix system, you may simply call signal(3) here. */ |
|
set_signal(sig,handler); |
|
/* unblock is necessary on cygwin, ... */ |
|
sigset[0] = sig; sigset[1]=0; unblock_signal(sigset); |
|
return((void *)Old_handler); |
} |
} |
|
|
|
|