当前位置:天才代写 > tutorial > C语言/C++ 教程 > Linux下C编程:sigsuspend历程阻塞

Linux下C编程:sigsuspend历程阻塞

2017-11-02 08:00 星期四 所属: C语言/C++ 教程 浏览:462

int sigsuspend(const sigset_t *sigmask);

此函数用于历程的挂起,sigmask指向一个信号集。当此函数被挪用时,sigmask所指向的信号会合的信号将赋值给信号掩码。之后历程挂起。直到历程捕获到信号,并挪用处理惩罚函数返回时,函数sigsuspend返回。信号掩码规复为信号挪用前的值,同时将errno设为EINTR。历程竣事信号可将其当即遏制。

#include <stdio.h>     
#include <signal.h>     
         
void checkset();     
void func();     
void main()     
{     
     sigset_tblockset,oldblockset,zeroset,pendmask;     
     printf("pid:%ld\n",(long)getpid());     
     signal(SIGINT,func);     
         
     sigemptyset(&blockset);     
     sigemptyset(&zeroset);     
     sigaddset(&blockset,SIGINT);     
         
     sigprocmask(SIG_SETMASK,&blockset,&oldblockset);     
     checkset();     
     sigpending(&pendmask);     
         
     if(sigismember(&pendmask,SIGINT))     
         printf("SIGINTpending\n");     
         
     if(sigsuspend(&zeroset)!= -1)     
     {     
     printf("sigsuspenderror\n");     
     exit(0);     
     }     
         
     printf("afterreturn\n");     
     sigprocmask(SIG_SETMASK,&oldblockset,NULL);     
         
     printf("SIGINTunblocked\n");     
}     
         
void checkset()     
{    sigset_tset;     
     printf("checksetstart:\n");     
     if(sigprocmask(0,NULL,&set)<0)     
     {     
     printf("checksetsigprocmask error!!\n");     
     exit(0);     
     }     
         
     if(sigismember(&set,SIGINT))     
     printf("sigint\n");     
         
     if(sigismember(&set,SIGTSTP))     
     printf("sigtstp\n");     
         
     if(sigismember(&set,SIGTERM))     
     printf("sigterm\n");     
     printf("checksetend\n");     
}     
         
void func()     
{     
     printf("hellofunc\n");     
}

Linux下C编程:sigsuspend过程阻塞

查察全套文章:http://www.bianceng.cn/Programming/C/201212/34807.htm

 

    关键字:

天才代写-代写联系方式