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)   暂时没有使用

  • 相关阅读:
    【Spring学习笔记-MVC-6】SpringMVC 之@RequestBody 接收Json数组对象
    【Spring学习笔记-MVC-1.1--】@PathVariable与@RequestParam、@CookieValue等比较
    【Oracle学习笔记-1】Win7下安装Oracle 10g
    【Oracle学习笔记-3】关于Oracle 10g中各种服务解析
    【前端编程-学习-5】系统加载提示
    【EasyUI学习-3】Easyui tabs入门实践
    【EasyUI学习-2】Easyui Tree的异步加载
    【Hibernate学习笔记-6.1】无连接表的N-1关联(单向)
    ArcGIS 要素合并
    Nginx 链接
  • 原文地址:https://www.cnblogs.com/notepi/p/2882063.html
Copyright © 2011-2022 走看看