Пример #1
0
int main(int argc, char const *argv[])
{
    sigset_t newmask,oldmask,waitmask;
    sigemptyset(&waitmask);
    sigaddset(&waitmask,SIGUSR1);

    sigemptyset(&newmask);
    sigaddset(&newmask,SIGINT);

    sigprocmask(SIG_BLOCK,&newmask,&oldmask);
    // THE BLEW IS CRICITLE RIGION
    // signal()
    pr_mask("the next is region: ");
    if (signal(SIGINT,sig_int)==SIG_ERR)
    {
        /* code */
        printf("err sig\n");
    }
    // sleep(5);
#if 0
    if (sigsuspend(&waitmask)!=-1)
    {
        /* code */printf("susupend err\n");
    }
    // printf("sigsuspend usr1\n");
    pr_mask("after sigsuspend: ");
#endif

    sigprocmask(SIG_SETMASK,&oldmask,NULL);
    pr_mask("not sigint block:");
    // printf("SIG INT NOT SIG_BLOCK\n");
    sleep(5);
    return 0;
}
Пример #2
0
int main ( int argc, char *argv[] )
{
    sigset_t newmask, oldmask, waitmask;
    pr_mask("program start:");
    if (signal(SIGINT, sig_int) == SIG_ERR)
	err_sys("signal(SIGINT) error");
    sigemptyset(&waitmask);
    sigaddset(&waitmask, SIGUSR1);
    sigemptyset(&newmask);
    sigaddset(&newmask,SIGINT);
    
    //block SIGINT and save current signal mask.
    if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
	err_sys("sigprocmask error!");
    
    // critical region of code.
    
    pr_mask("in critiacl region: ");

    //pause allowing all signlas except SIGUSR1

    if (sigsuspend(&waitmask) != -1)
	err_sys("sigsuspend error!");
    pr_mask("after return from sigsuspend: ");
    // reset signal mask which unblocks SIGINT.
    if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
	err_sys("SIG_SETMASK erroR!");

    // and continuse processing ...
    pr_mask("program exit:" );
    return 0;
}	/* ----------  end of function main  ---------- */
Пример #3
0
int main(void)
{
	int ret;

	if(signal(SIGUSR1, sig_usr1) == SIG_ERR)
	{
		printf("signal (SIGUSR1) error");
	}

	if(signal(SIGALRM, sig_alrm) == SIG_ERR)
	{
		printf("signal(SIGALRM) error");
	}

	pr_mask("starting main: ");

	ret = sigsetjmp(jmpbuf, 1);
	if(ret)
	{
		pr_mask("ending main: ");
		exit(0);
	}
	canjump = 1;

	for(;;)
		pause();
}
Пример #4
0
int main(void){
  
  sigset_t newmask,oldmask,waitmask;
  
  pr_mask("pro start:");

  if(signal(SIGINT,sig_int)==SIG_ERR)
    err_sys("sigint err");
  
  sigemptyset(&waitmask);
  sigaddset(&waitmask,SIGUSR1);
  sigemptyset(&newmask);
  sigaddset(&newmask,SIGINT);

  if(sigprocmask(SIG_BLOCK,&newmask,&oldmask)<0)
    err_sys("sig_block  err");

  pr_mask("in critical region:");
  
  if(sigsuspend(&waitmask)!=-1)
    err_sys("sigsupend err");
  pr_mask("after return sigsuspend:");
  
  if(sigprocmask(SIG_SETMASK,&oldmask,NULL)<0)
    err_sys("sigsetmask err");
  
  pr_mask("pro exit:");
  exit(0);
}
Пример #5
0
int main(void) {
    sigset_t newmask, oldmask, waitmask;

    pr_mask("program start ");

    if (signal(SIGINT, sig_int) == SIG_ERR) {
        err_sys("signal(SIGERR) error");
    }

    sigemptyset(&waitmask);
    sigaddset(&waitmask, SIGUSR1);
    sigemptyset(&newmask);
    sigaddset(&newmask, SIGINT);

    if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0) {
        err_sys("SIG_BLOCK error");
    }

    pr_mask("in critical region: ");

    if (sigsuspend(&waitmask) != -1) {
        err_sys("sigsuspend error");
    }

    pr_mask("after erturn from sigsuspend: ");

    if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0) {
        err_sys("SIG_SETMASK error");
    }

    pr_mask("program exit: ");
    exit(0);
}
Пример #6
0
int
main(void)
{
	sigset_t	newmask, oldmask, zeromask;

	if (signal(SIGINT, sig_int) == SIG_ERR)
		err_sys("signal(SIGINT) error");

	sigemptyset(&zeromask);

	sigemptyset(&newmask);
	sigaddset(&newmask, SIGINT);
					/* block SIGINT and save current signal mask */
	if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
		err_sys("SIG_BLOCK error");

					/* critical region of code */
	pr_mask("in critical region: ");

					/* allow all signals and pause */
	if (sigsuspend(&zeromask) != -1)
		err_sys("sigsuspend error");
	pr_mask("after return from sigsuspend: ");

					/* reset signal mask which unblocks SIGINT */
	if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
		err_sys("SIG_SETMASK error");

					/* and continue processing ... */
	exit(0);
}
Пример #7
0
void sig_usr1(int signo)
{
    time_t starttime;
	if (canjmp == 0)
		return;
	pr_mask("starting sig_usr1: ");
	alarm(3);
	starttime = time(NULL);
	for ( ; ; )
		if (time(NULL) > starttime + 5)
			break;
	pr_mask("finishing sig_usr1: ");
	canjmp = 0;
	siglongjmp(sig_env, 1);
}
Пример #8
0
int main(){
	if(signal(SIGALRM,sig_alrm)==SIG_ERR)
		err_sys("signal alrm error");
	if(signal(SIGUSR1,sig_usr1)==SIG_ERR)
		err_sys("signal usr1 error");
	pr_mask("in main:");
	if(sigsetjmp(buf,1)!=0){
		//ret from siglongjmp
		pr_mask("back from siglongjmp:");
		exit(0);
	}
	canjmp=1;
	for(;;)
		pause();
}
int main(int argc, char *argv[])
{
	struct sigaction act, oact;
	sigset_t set, newset;

#if 1
	sigfillset(&newset);
	sigaddset(&newset, SIGUSR1);
	sigdelset(&newset, SIGQUIT);
	sigdelset(&newset, SIGINT);
	sigprocmask(SIG_SETMASK, &newset, NULL);
#endif

	/* set signal function mask */
	act.sa_handler = sig_quit_int;
	act.sa_flags = 0;
	sigemptyset(&act.sa_mask);
	sigaddset(&act.sa_mask, SIGUSR2);
	sigaction(SIGQUIT, &act, NULL);
	sigaction(SIGINT, &act, NULL);
	pr_mask("main function signal set");
	for ( ; ; )
	{
		write(STDOUT_FILENO, ".", sizeof("."));
		sleep(1);
	}

	return 0;
}
Пример #10
0
static void sig_usr1(int signo)
{
	time_t starttime;

	if (canjump == 0)
		return;
	pr_mask("in sig_usr1(): ");
	alarm(3);
	starttime = time(NULL);
	while (1)
		if (time(NULL) > starttime + 5)
			break;
	pr_mask("finishing sig_usr1: ");
	canjump = 0;
	siglongjmp(jmpbuf, 1);
}
Пример #11
0
static void sig_usr1(int signo){
	time_t starttime;
	pr_mask("in sig_usr1:");
	if(canjmp==0)
		return;
	alarm(3);
	starttime=time(NULL);
	for(;;)
	{
		if((time(NULL)-starttime)>5)
			break;
	}
	pr_mask("back from sig_alrm:");
	canjmp=0;
	siglongjmp(buf,1);
}
Пример #12
0
int main(void)
{
    sigset_t newmask,oldmask,waitmask;

    pr_mask("program start:");
    if(signal (SIGINT,sig_int) == SIG_ERR)
        err_sys("signal(SIGINT) error");
    sigemptyset(&waitmask);
    sigaddset(&waitmask,SIGUSR1);
    sigemptyset(&newmask);
    sigaddset(&newmask,SIGINT);

    /*
        Block SIGINT and save current signal mask.
        *
    */

    if(sigprocmask(SIG_BLOCK,&newmask,&oldmask) < 0)
        err_sys("SIG_BLOCK error");

    /*
       critical region of code.
       */
    pr_mask("in critical region:");

    /*
       Pause, allowing all signals except SIGUSR1
    */
    if(sigsuspend(&waitmask) != -1)
        err_sys("sigsupsend error");

    pr_mask("after return from sigsuspend:");
    
    /*
     * Reset signal mask which unblocks SIGINT.
     */

    if(sigprocmask(SIG_SETMASK,&oldmask,NULL) < 0)
        err_sys("SIG_SETMASK error");

    /*
     * And continue processing ...
     */
    pr_mask("program exit:");

    exit(0);
}
Пример #13
0
static void sig_usr1(int signo)
{
	time_t starttime;
	if(0 == canjump)
		return; 	/* unexpected signal, ignore */
	pr_mask("starting sig_usr1: ");
	alarm(3); 		/* SIGALRM in 3 seconds */
	starttime = time(NULL);
	for(; ;) 		/* busy wait for 5 seconds */
		if(time(NULL) > starttime + 5)
			break;

	pr_mask("finishing sig_usr1: ");

	canjump = 0;
	siglongjmp(jmpbuf, 1); 	/* jump back to main, don't return */
}
Пример #14
0
int main(void)
{
	if(signal(SIGUSR1, sig_usr1) == SIG_ERR)
		err_sys("signal(SIGUSR1) error");
	if(signal(SIGALRM, sig_alrm) == SIG_ERR)
		err_sys("signal(SIGALRM) error");
	pr_mask("starting main: ");

	if(sigsetjmp(jmpbuf, 1))
	{
		pr_mask("ending main: ");
		exit(0);
	}
	canjump = 1;  /* now sigsetjmp() is OK */
	for(; ;)
		pause();
}
Пример #15
0
int main(void)
{
	if (signal(SIGUSR1, sig_usr1) == SIG_ERR)
		err_sys("signal(SIGUSR1) error");
	if (signal(SIGALRM, sig_alrm) == SIG_ERR)
		err_sys("signal(SIGALRM) error");

	pr_mask("stating main: ");

	if (sigsetjmp(jmpbuf, 1) != 0) {
		pr_mask("ending main: ");
		exit(0);
	}
	canjump = 1;
	while (1)
		pause();
}
Пример #16
0
int main(int argc, char **argv)
{
    if (signal(SIGUSR1, sig_usr1) == SIG_ERR)
		err_sys("signal error");
	if (signal(SIGALRM, sig_alrm) == SIG_ERR)
		err_sys("signal error");

	pr_mask("starting main: ");
	
	if (sigsetjmp(sig_env, 1)) { // for siglongjmp
		pr_mask("ending main: ");
		exit(0);
	}
	canjmp = 1;

	for ( ; ; )
		pause();
}
Пример #17
0
static void sig_int(int signo)
{
	pr_mask("\nin sig_int: ");
	sigset_t set;
	sigemptyset(&set);
	sigaddset(&set, SIGUSR1);
	if(sigprocmask(SIG_BLOCK, &set, NULL) < 0)
		err_sys("BLOCK error");
}
Пример #18
0
int main(void)
{
    if (signal(SIGUSR1,sig_usr1) == SIG_ERR) {
        err_sys("signal(SIGUSR1) error");
    }

    if (signal(SIGUSR2,sig_alrm) == SIG_ERR) {
        err_sys("signal(SIGALRM) error");
    }
    pr_mask("starting main:");

    if (sigsetjmp(jmpbuf,1)) {
        pr_mask("ending main:");
        exit(0);
    }
    canjump = 1;
    for (; ;) {
        pause();
    }
}
void sig_quit(int signum)
{
	pr_mask("sig_quit");
	int i;
	for (i = 0; i < 10; i++)
	{
		write(STDOUT_FILENO, "+", sizeof("+"));
		sleep(1);
	}
	return;
}
Пример #20
0
static void
sig_usr1(int signo)
{
	time_t starttime;
	
	if (canjump == 0)
		return;    // unexpected signal, ignore 
	
	pr_mask("starting sig_usr1: ");

	alarm(3);
	starttime = time(NULL);
	for (;;)  // busy wait for 5 seconds
		if (time(NULL) > starttime + 5)
			break;

	pr_mask("finishing sig_usr1: ");

	canjump = 0;
	siglongjmp(jmpbuf, 1);
}
Пример #21
0
int main(void) {
	if(signal(SIGUSR1, sig_usr1) == SIG_ERR)
		err_sys("signal(SIGUSR1) error");

	if(signal(SIGALRM, sig_alrm) == SIG_ERR)
		err_sys("signal(SIGALRM) error");

	pr_mask("starting main: ");

	if(sigsetjmp(jmpbuf, 1)) {
//	if(setjmp(jmpbuf)) {	/* main sig mask is not saved */
		pr_mask("ending main: ");
		return 0;
	}

	canjmp = 1;

	for( ; ; )
		pause();

	return 0;
}
Пример #22
0
int
main(void)
{
	if (signal(SIGUSR1, sig_usr1) == SIG_ERR) {
		fprintf(stderr, "signal(SIGUSR1) error");
    exit(1);
  }
	if (signal(SIGALRM, sig_alrm) == SIG_ERR) {
		fprintf(stderr, "signal(SIGALRM) error");
    exit(1);
  }
	pr_mask("starting main: ");
	/* Figure 10.14 */
	if (sigsetjmp(jmpbuf, 1)) {
		pr_mask("ending main: ");
		exit(0);
	}
	canjump = 1;
	/* now sigsetjmp() is OK */
	for (;;)
		pause();
}
void sig_quit_int(int signum)
{
	char buf[64], prbuf[2];
	int i;
	sprintf(buf, "in sig_quit_int signal %d", signum);
	pr_mask(buf);
	sprintf(prbuf, "%d", signum);
	for (i = 0; i < 10; i++)
	{
		write(STDOUT_FILENO, prbuf, 2);
		sleep(1);
	}
	return;
}
Пример #24
0
static void sig_usr1(int signo)
{
    time_t starttime;

    if (0 == canjump) {
        return ;
    }
    pr_mask("starting sig_usr1:");
    alarm(3);
    starttime = time(NULL);
    /* 时间太长了!
    for (; ;) {
        if (time(NULL) > starttime + 5) {
            break;
        }
    }
    */

    pr_mask("finishing sig_usr1:");

    canjump = 0;
    siglongjmp(jmpbuf,1);
}
int main(int argc, char *argv[])
{
	sigset_t sigset, oldmask;

	if (sigemptyset(&sigset) < 0) 
		err_sys("initialization sigset error");
	if (sigaddset(&sigset, SIGINT) < 0) 
		err_sys("sigaddset error");
	if (sigaddset(&sigset, SIGALRM) < 0) 
		err_sys("sigaddset error");

	sigprocmask(SIG_BLOCK, &sigset,&oldmask);
	pr_mask("hello world");
	exit(EXIT_SUCCESS);
}
Пример #26
0
int main(void)
{
    sigset_t	    nmask, omask, zmask;

    if (signal(SIGINT, sig_int) == SIG_ERR) {
	perror("signal(SIGINT) error");
	exit(1);
    }

    sigemptyset(&zmask);

    sigemptyset(&nmask);
    sigaddset(&nmask, SIGINT);

    if (sigprocmask(SIG_BLOCK, &nmask, &omask) < 0) {
	perror("sigprocmask(SIG_BLOCK) error");
	exit(1);
    }

    pr_mask("in critical region");
    
    if (sigsuspend(&zmask) != -1) {
	perror("sigsuspend error");
	exit(1);
    }

    pr_mask("after return from sigsuspend");
    
    if (sigprocmask(SIG_SETMASK, &omask, NULL) < 0) {
	perror("sigprocmask(SIG_SETMASK) error");
	exit(1);
    }

    exit(0);

}
int main(int argc, char *argv[])
{
	sigset_t waitset;
	sigset_t sysset;
	struct sigaction act;
	act.sa_handler = sig_quit;
	act.sa_flags = SA_NODEFER;
	sigemptyset(&act.sa_mask);

	sigaction(SIGQUIT, &act, NULL);

	sigfillset(&sysset);
	sigdelset(&sysset, SIGQUIT);
	sigdelset(&sysset, SIGINT);

	sigprocmask(SIG_SETMASK, &sysset, NULL);
	pr_mask("befer suspend");
	int i;
	for (i = 0; i < 10; i++)
	{
		write(STDOUT_FILENO, "-", sizeof("-"));
		sleep(1);
	}
#if 1
	sigemptyset(&waitset);
	sigaddset(&waitset, SIGINT);
	sigsuspend(&waitset);
#endif
	for ( ; ; )
	{
		write(STDOUT_FILENO, ".", sizeof("."));
		sleep(1);
	}
	pr_mask("after suspend");
	return 0;
}
Пример #28
0
static void sig_int(int signo){

  pr_mask("in sig_int:");

}
Пример #29
0
void sig_int(int signo)
{
    pr_mask("\n in sig_int");
    return;
}
Пример #30
0
void sig_alrm(int signo)
{
    pr_mask("in sig_alrm: ");
}