Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1058829
  • 博文数量: 573
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 66
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-28 16:21
文章分类

全部博文(573)

文章存档

2018年(3)

2016年(48)

2015年(522)

分类: LINUX

2015-12-02 15:59:17


点击(此处)折叠或打开

  1. #include <string.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <signal.h>
  5. #include <time.h>
  6. #include <sys/time.h>
  7. #include <sys/timeb.h>
  8. #include <stdarg.h>

  9. int sig_mask();
  10. void ALRM_FUN(int sig);

  11. int main(int argc, char ** argv)
  12. {
  13.     printf("1*****************************************\n");
  14.     sig_mask();
  15.     
  16.     return 0;
  17.     
  18. }

  19. int sig_mask()
  20. {
  21.     signal(SIGALRM, ALRM_FUN);
  22.     sigset_t set;
  23.     sigset_t oldset;
  24.     sigset_t saveset;
  25.     
  26.     /*sigemptyset函数功能:清空信号集中的所有信号*/
  27.     sigemptyset(&set);
  28.     sigemptyset(&oldset);
  29.     
  30.     /*sigaddset函数功能:增加一个信号到信号集*/
  31.     sigaddset(&set, SIGUSR1);
  32.     sigaddset(&set, SIGINT);
  33.     sigaddset(&set, SIGALRM);
  34.     
  35.     sigprocmask(SIG_BLOCK, &set, &saveset); /*向当前进程的信号屏蔽字中添加希望被阻塞的信号,但是并不表示该信号正在被阻塞*/
  36.     
  37.     alarm(1);
  38.     int i = -1;
  39.     int j = -1;
  40.     int m = -1;
  41.     for(i=0; i<1000; i++)
  42.     {
  43.         for(j=0; j<1000; j++)
  44.         {
  45.             for(m=0; m<1000; m++)
  46.             {
  47.             }
  48.         }
  49.     }
  50.     
  51.     /*sigpending函数功能:返回当前进程正在被阻塞的信号*/
  52.     sigpending(&oldset);
  53.     
  54.     /*sigprocmask(0, NULL, &oldset);*/ /*返回当前进程的信号屏蔽字所阻塞的信号,不是正在被阻塞的信号*/
  55.     
  56.     int ret = -1;
  57.     printf("*****************************************\n");
  58.     /*sigismember函数功能:测试某个信号是否在信号集中*/
  59.     if(sigismember(&oldset, SIGHUP)) printf("SIGHUP\n");
  60.     if(sigismember(&oldset, SIGINT)) printf("SIGINT\n");
  61.     if(sigismember(&oldset, SIGQUIT)) printf("SIGQUIT\n");
  62.     if(sigismember(&oldset, SIGUSR1)) printf("SIGUSR1\n");
  63.     if(sigismember(&oldset, SIGALRM)) printf("SIGALRM\n");
  64.     printf("*****************************************\n");
  65.     
  66.     printf("解除阻塞1:\n");
  67.     /*sigprocmask(SIG_UNBLOCK, &oldset, NULL);*/
  68.     
  69.     sigprocmask(SIG_SETMASK, &saveset, NULL); /*恢复系统默认动作*/
  70.     printf("解除阻塞2:\n");
  71.     
  72.     return 0;
  73. }

  74. void ALRM_FUN(int sig)
  75. {
  76.     printf("收到时钟信号 14号SIGALRM信号!\n");
  77.     int i = -1;
  78.     int j = -1;
  79.     int m = -1;
  80.     for(i=0; i<500; i++)
  81.     {
  82.         for(j=0; j<1000; j++)
  83.         {
  84.             for(m=0; m<1000; m++)
  85.             {
  86.             }
  87.         }
  88.     }
  89. }

阅读(470) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~