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)

    {} 

  • 相关阅读:
    Smobiler如何实现.net一键开发,ios和android跨平台运行
    使用Smobiler实现类似美团的界面
    疫情当下,企业系统如何快速实现移动化?
    Smobiler针对百度文字识别SDK动态编译与运行
    smobiler自适应不同手机分辨率
    仓库管理移动应用解决方案——C#开发的移动应用开源解决方案
    移动OA办公——Smobiler第一个开源应用解决方案,快来get吧
    react-native 标题随页面滚动显示和隐藏
    react-native 键盘遮挡输入框
    解决adb网络连接中出现的“由于目标计算机积极拒绝,无法连接”错误
  • 原文地址:https://www.cnblogs.com/hbt19860104/p/2626387.html
Copyright © 2011-2022 走看看