sigaction捕捉与忽略信号
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <math.h>
#include <signal.h>
#include <math.h>
static volatile sig_atomic_t doneflag=0;
static void setdoneflag(int signo){
doneflag=1;
}
int main(int argc,char *argv[])
{
struct sigaction act;
int count=0;
double sum=0;
double x;
act.sa_handler=setdoneflag;
act.sa_flags=0;
if((sigemptyset(&act.sa_mask)==-1)||(sigaction(SIGINT,&act,NULL))){
perror("Failed to set SIGINT handler");
return 1;
}
while(!doneflag){
x=(rand()+0.5)/(RAND_MAX+1.0);
sum +=sin(x);
count++;
printf("Count is %d and average is %f\n",count,sum/count);
}
printf("Program terminating ...\n");
if(count ==0)
printf("No value calculated yet\n");
else
printf("Count is %d and average is %f\n",count,sum/count);
return 0;
}
函数原型