代碼如下:
#include
#include
#include
/*static volatile atomic variable*/
static volatile sig_atomic_t sigflag = 0;
/*private signal control handler*/
static void TurnFlag(int no){
sigflag = (sigflag == 0) ? 1 : 0;
}來源:考試大網(wǎng)
/**
* set signal handler
* if error return -1
* or return 0
*/
int InitHandler(int signo){ /*signal macro*/
/*using sigaction function need this struct*/
struct sigaction act;
act.sa_handler = TurnFlag; /*set signal function*/
act.sa_flags = 0;/*meaning sigaction is pure action*/
if( (sigemptyset(&act.sa_mask) == -1) || /*get empty mask*/
(sigaddset(&act.sa_mask,signo) == -1) ||/*add signo into mark*/
(sigaction(signo,&act,NULL) == -1) ) /*execute function*/
return -1;
return 0;
}
/*control signal,main method is suspeed signal and restore signal
* if error return -1,or return 0*/
int ControlSig(int signo){
/*actunblock variable mean no block mask
* actblock variable meaning need to block mask
* actold is original mask for restore
* */
sigset_t actunblock,actblock,actold;
if( (sigprocmask(SIG_SETMASK,NULL,&actunblock) == -1) ||
(sigprocmask(SIG_SETMASK,NULL,&actblock) == -1) ||
(sigaddset(&actblock,signo) == -1) ||
(sigdelset(&actunblock,signo) == -1) ||
(sigprocmask(SIG_BLOCK,&actblock,&actold) == -1) )
return -1;
#include
#include
#include
/*static volatile atomic variable*/
static volatile sig_atomic_t sigflag = 0;
/*private signal control handler*/
static void TurnFlag(int no){
sigflag = (sigflag == 0) ? 1 : 0;
}來源:考試大網(wǎng)
/**
* set signal handler
* if error return -1
* or return 0
*/
int InitHandler(int signo){ /*signal macro*/
/*using sigaction function need this struct*/
struct sigaction act;
act.sa_handler = TurnFlag; /*set signal function*/
act.sa_flags = 0;/*meaning sigaction is pure action*/
if( (sigemptyset(&act.sa_mask) == -1) || /*get empty mask*/
(sigaddset(&act.sa_mask,signo) == -1) ||/*add signo into mark*/
(sigaction(signo,&act,NULL) == -1) ) /*execute function*/
return -1;
return 0;
}
/*control signal,main method is suspeed signal and restore signal
* if error return -1,or return 0*/
int ControlSig(int signo){
/*actunblock variable mean no block mask
* actblock variable meaning need to block mask
* actold is original mask for restore
* */
sigset_t actunblock,actblock,actold;
if( (sigprocmask(SIG_SETMASK,NULL,&actunblock) == -1) ||
(sigprocmask(SIG_SETMASK,NULL,&actblock) == -1) ||
(sigaddset(&actblock,signo) == -1) ||
(sigdelset(&actunblock,signo) == -1) ||
(sigprocmask(SIG_BLOCK,&actblock,&actold) == -1) )
return -1;