https://blog.csdn.net/nicai888/article/details/73197625
原文连接
请摸这里
将文中最后一段稍微改了一小段
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
void sig_alrm(int n){printf("zzzzzzz");}
unsigned int mysleep(unsigned int nsecs){
struct sigaction newact,oldact;//new保存新的信号处理动作,old保存原有的信号处理动作
sigset_t newmask,oldmask,suspmask;//newmask将要添加的阻塞信号集,oldmask原有信号集
unsigned int unslept;
//设置SIGALRM信号处理函数,保存原有信号处理函数
newact.sa_handler = sig_alrm;
sigemptyset(&newact.sa_mask);
newact.sa_flags = 0;
void sig_alrm(int n){printf("zzzzzzz");}
unsigned int mysleep(unsigned int nsecs){
struct sigaction newact,oldact;//new保存新的信号处理动作,old保存原有的信号处理动作
sigset_t newmask,oldmask;//newmask将要添加的阻塞信号集,oldmask原有信号集
unsigned int unslept;
//设置SIGALRM信号处理函数,保存原有信号处理函数
newact.sa_handler = sig_alrm;
sigemptyset(&newact.sa_mask);
newact.sa_flags = 0;
sigaction(SIGALRM,&newact,&oldact);
//设置阻塞SIGALRM信号,并保存当前阻塞信号集
sigemptyset(&newmask);
sigaddset(&newmask,SIGALRM);
sigprocmask(SIG_BLOCK,&newmask,&oldmask);
printf ("yyyyyy");
alarm(nsecs);//设置定时
sigdelset(&newmask,SIGALRM);
//sigprocmask(SIG_BLOCK,&newmask,NULL);
sigsuspend(&newmask);
printf("xxxxxx");
unslept = alarm(0);
sigaction(SIGALRM,&oldact,NULL);
sigprocmask(SIG_SETMASK,&oldmask,NULL);
return 0;
}
int main(void){
while(1){
mysleep(2);
printf("two seconds passed\n");
}
return 0;
}