23,217
社区成员




#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/resource.h>
#define _CORE_SIZE 256 * 1024 * 1024
static int _core_dump_signals[] = {
SIGABRT, SIGFPE, SIGILL, SIGQUIT, SIGSEGV,
SIGTRAP, SIGSYS, SIGBUS, SIGXCPU, SIGXFSZ,
#ifdef SIGEMT
SIGEMT
#endif
};
#ifndef ARRAY_SIZE
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
#endif
int *k;
int i = 2;
void _dump_and_restart1(int signo)
{
printf("I am receiving signo: %d\n", signo);
k=(int*)malloc(sizeof(int));
// printf("k=%x\n",k);
}
int main(void)
{
//_daemonize();
struct sigaction act;
int i;
memset(&act, 0, sizeof(act));
act.sa_handler = _dump_and_restart1;
sigfillset(&act.sa_mask);
for (i = 0; i < ARRAY_SIZE(_core_dump_signals); i ++)
sigaction(_core_dump_signals[i], &act, NULL);
sigprocmask(SIG_UNBLOCK, &act.sa_mask, NULL);
*k = 10;
printf("%x\n",k);
return 0;
}
/*-
* Copyright (C), 1988-2010, Kobus Co., Ltd.
*
* vi:set ts=4 sw=4:
*
* $Id$
*
* $Log$
*/
#ifndef lint
static const char RCSID[] =
"$Id$";
static const char RELID[] =
"$" "Date: "__FILE__" "__DATE__" "__TIME__" $";
#endif /* not lint */
/**
* @file ksegv.c
* @brief
*/
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
jmp_buf segv_buf;
int *ptr = 0;
void sig_segv(int sig)
{
ptr = malloc(sizeof(int));
longjmp(segv_buf, 1);
}
int
main(int argc, char *argv[])
{
signal(SIGSEGV, &sig_segv);
setjmp(segv_buf);
*ptr = 10;
printf("%p %d\n", ptr, *ptr);
free(ptr);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <setjmp.h>
int *k;
sigjmp_buf e;
void foo(int signo)
{
printf("I am receiving signo: %d\n", signo);
k = (int*)malloc(sizeof(int));
printf("1k=%x\n",k);
siglongjmp(e, 1);
}
int main(void)
{
struct sigaction act;
memset(&act, 0, sizeof(act));
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
act.sa_handler = foo;
sigaction(SIGSEGV, &act, NULL);
sigsetjmp(e, 0);
*k = 10;
printf("2k=%x\n",k);
return 0;
}