zoukankan      html  css  js  c++  java
  • 信号处理测试代码

    #include <sys/sem.h>
    #include<stdio.h>
    #include<signal.h>
    #include<unistd.h>
    #include <stdarg.h>
    #include <string.h>
    sigset_t        oldset;

    typedef struct __sig_mask{
        sigset_t sig_newset,sig_oldset;
        int set_flag;/*当调用完mask_procmask后,置1,否则,为0*/
        int (*mask_addsig)(struct __sig_mask* pSigMask,int signum,int sig1,...);
        int (*mask_addAll)(struct __sig_mask* pSigMask);
        int (*mask_procmask)(struct __sig_mask* pSigMask);
        int (*unmask)(struct __sig_mask* pSigMask);
    }SIG_MASK,*P_SIG_MASK;
    int getMaskObject(P_SIG_MASK  p_sig_mask);
     char *getCurrFileName();
     int createCriticalSection(int id);
     int enterCriticalSection(int semID);
     int releaseCriticalSection(int semID);

     /*signal process segment*/

    int mask_addsig(P_SIG_MASK pSigMask,int signum,int sig1,...)
    {
        va_list arg_ptr; 
        int signal;
        int i;
        if(!pSigMask)
            return -1;
        
        va_start(arg_ptr,signum);
        for(i=0;i<signum;i++)
        {
            signal=va_arg(arg_ptr,int);
            if (sigaddset(&(pSigMask->sig_newset), signal)!=0)
            {
              va_end(arg_ptr);
              return -1;
            }
        }
        if (sigaddset(&(pSigMask->sig_newset), SIGINT)!=0)
            {
              return -1;
            }
        va_end(arg_ptr);
        return 1;
    }
    int mask_addAll(P_SIG_MASK pSigMask)
    {
        if(!pSigMask)
            return -1;
        sigfillset(&(pSigMask->sig_newset));
        return 1;
    }
    int mask_procmask(P_SIG_MASK pSigMask)
    {
        if(!pSigMask)
            return -1;
        /*printf("...sig_newset:%x\n",pSigMask->sig_newset);*/
        if(pSigMask->set_flag)
            return 0;
        if (sigprocmask(SIG_SETMASK, &(pSigMask->sig_newset),&(pSigMask->sig_oldset)) != 0)
        {
            return -1;
        }
        pSigMask->set_flag=1;
        return 1;
    }
    int mask_unmask(P_SIG_MASK pSigMask)
    {
        if(!pSigMask)
            return -1;
        /*printf("mask_unmask sig_oldset:%x\n",pSigMask->sig_oldset);*/
        if (sigprocmask(SIG_SETMASK, &(pSigMask->sig_oldset),NULL) != 0)
        {
            return -1;
        }
        pSigMask->set_flag=0;
        return 1;
    }
    int getMaskObject(P_SIG_MASK     p_sig_mask)
    {
        if (sigemptyset(&(p_sig_mask->sig_newset))||sigemptyset(&(p_sig_mask->sig_oldset)))
          return -1;
        p_sig_mask->set_flag=0;
        p_sig_mask->mask_addsig=mask_addsig;
        p_sig_mask->mask_addAll=mask_addAll;
        p_sig_mask->mask_procmask=mask_procmask;
        p_sig_mask->unmask=mask_unmask;
        return 1;
    }
    /*signal process segment end*/

    ///使用 

    SIG_MASK sig_mask;
    P_SIG_MASK p_sig_mask=&sig_mask;
     p_sig_mask->mask_addsig(p_sig_mask,1,SIGTERM);
    if(p_sig_mask->mask_procmask(p_sig_mask)==-1)
    {}
    ......
    if(p_sig_mask->unmask(p_sig_mask)==-1)

    {} 

  • 相关阅读:
    导数,微积分,牛顿运动学制作创意地图
    逻辑回归的算法思想
    偏导数
    POJ2112:Optimal Milking(Floyd+二分图多重匹配+二分)
    POJ2289:Jamie's Contact Groups(二分+二分图多重匹配)
    HDU3829:Cat VS Dog(最大独立集)
    POJ2594:Treasure Exploration(Floyd + 最小路径覆盖)
    HDU1151:Air Raid(最小边覆盖)
    HDU1054 Strategic Game(最小点覆盖)
    POJ3020:Antenna Placement(二分图匹配)
  • 原文地址:https://www.cnblogs.com/hbt19860104/p/2626387.html
Copyright © 2011-2022 走看看