zoukankan      html  css  js  c++  java
  • sigaction函数解释

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <unistd.h>
     4 #include <signal.h>
     5 int g_iSeq=0;
     6 
     7 void SignHandlerNew (int iSignNo ,siginfo_t *pInfo,void *pReserved)
     8 {
     9 int iSeq=g_iSeq++;
    10 printf("%d enter Signhandlernow.signo:%d.\n",iSeq,iSignNo);
    11 sleep(3);
    12 printf("%d leave Signhandlernow.signo:%d.\n",iSeq,iSignNo);
    13 }
    14 void main()
    15 {
    16     char szBuf[20];     //设定缓存区
    17     int iRet;
    18     struct sigaction  act;
    19     act.sa_sigaction=SignHandlerNew;
    20     act.sa_flags=SA_SIGINFO;
    21     sigemptyset(&act.sa_mask);
    22     sigaction(SIGINT,&act,NULL);
    23     sigaction (SIGOUT,&act,NULL);
    24     do{
    25         iRet=read(STDIN_FILENO,szBuf,,sizeof(szBuf)-1);
    26         if(iRet<0)
    27         {
    28             perror("read fail.");
    29             break;
    30             }
    31             szBuf[iRet]=0;
    32             printf("get:%s,"szBuf);
    33         }
    34         while(strcmp(szBuf,"quit\n")!=0);
    35             return 0;
    36     }

    上面是一个例文代码。

    头文件不解释,结构体的使用不解释,不明了的自己谷歌。

    进入正题  

    7 void SignHandlerNew (int iSignNo ,siginfo_t *pInfo,void *pReserved)
    

      这是一个函数,要讲的一点就是,SignHandlerNew属于函数的指针,使用函数名字也就是指针的引用,在后面会讲到。

    18     struct sigaction  act;
    

      设定一个结构体函数数据类型成员 act,sigaction是一个系统默认结构函数。sigaction函数原型为

    1 struct sigaction
    2 {

    3 void (*sa_handler); 4 void (*sa_sigaction)(int,siginfo *, void *)5 sigset_t sa_mask; 7 int sa_flags; 8 void (*sa_restorer)(void); 9 }

    sa_handler 是一个函数指针,用于指向原型为void handler(int)的信号处理函数地址【在前面有提及,下同】,即老类型的信号处理函数。

    *sa_sigaction 是一个函数指针,指向一个void handler(int iSignum,siginfo_t *pSigInfo,void *pReserved);

    的信号处理函数,即新类型的信号处理函数。sigaction

    其中iSignum为传入的信号

    pSigInfo:与该信号相关的一些信息,也是一个结构体

    pReserved:没有使用。

    在sigaction结构体函数中,指向新函数和老函数的指针只能有一个可以正常使用。

    继续介绍sigaction结构体的成员类型  sa_mask  ,这个是被阻塞信号集合.所谓阻塞信号集合就是,当sigaction函数遇到要捕捉的函数时,信号集合内的信号将被堵塞,也就是暂时扔到一边,先不处理.

    int sa_flags;为信号处理方式掩码,其中包含使用哪个函数指针.具体大家谷歌。

    void (*sa_restorer)(void)   暂时没有使用

  • 相关阅读:
    BZOJ 4886 Lydsy1705月赛 叠塔游戏
    BZOJ 4552 TJOI2016&&HEOI2016 排序
    BZOJ 3702 二叉树
    BZOJ 4756 Usaco2017 Jan Promotion Counting
    BZOJ 4842 Neerc2016 Delight for a Cat
    BZOJ 1283 序列
    BZOJ 4819 SDOI2017 新生舞会
    BZOJ 1531 POI2005 Bank notes
    BZOJ 1925 SDOI2010 地精部落
    BZOJ WC2006 水管局长数据加强版
  • 原文地址:https://www.cnblogs.com/notepi/p/2882063.html
Copyright © 2011-2022 走看看