网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
天线制作 GPS 地标
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | Open source | GNU | Linux | BSD | Solaris | AIX | HP-UX | IRIX | Mac OS X | Minix | Tru64 | SCO UNIX | Network | Security | X-Window | Database | 应用服务 | Programming | 经典著作 | 永远的纪念 | 杂项
 当前位置: Home > Linux > 程序设计 > 进程间通讯 > 文章  
Linux环境进程间通信(二): 信号(上)
文章来源: IBM Developerworks 文章作者: 郑彦兴 发布时间: 2003-01-01   字体: [ ]  
 
    __sighandler_t _sa_handler;
    void (*_sa_sigaction)(int,struct siginfo *, void *);
  }_u
 
  sigset_t sa_mask;
  unsigned long sa_flags;
  void (*sa_restorer)(void);
}

  其中,sa_restorer,已过时,POSIX不支持它,不应再被使用。

  1、联合数据结构中的两个元素_sa_handler以及*_sa_sigaction指定信号关联函数,即用户指定的信号处理函数。除了可以是用户自定义的处理函数外,还可以为SIG_DFL(采用缺省的处理方式),也可以为SIG_IGN(忽略信号)。

  2、由_sa_handler指定的处理函数只有一个参数,即信号值,所以信号不能传递除信号值之外的任何信息;由_sa_sigaction是指定的信号处理函数带有三个参数,是为实时信号而设的(当然同样支持非实时信号),它指定一个3参数信号处理函数。第一个参数为信号值,第三个参数没有使用(posix没有规范使用该参数的标准),第二个参数是指向siginfo_t结构的指针,结构中包含信号携带的数据值,参数所指向的结构如下:

siginfo_t
{
  int  si_signo;  /* 信号值,对所有信号有意义*/
  int  si_errno;  /* errno值,对所有信号有意义*/
  int  si_code;   /* 信号产生的原因,对所有信号有意义*/
       
  union
  {
    /* 联合数据结构,不同成员适应不同信号 */ 
    //确保分配足够大的存储空间
   
    int _pad[SI_PAD_SIZE];
   
    //对SIGKILL有意义的结构
    struct
    {
      ...
    }...
   
    ... ...
    ... ...         
   
    //对SIGILL, SIGFPE, SIGSEGV, SIGBUS有意义的结构
    struct
    {
      ...
    }...
     
    ... ...
  }
}

  注:为了更便于阅读,在说明问题时常把该结构表示为附录2所表示的形式。

  siginfo_t结构中的联合数据成员确保该结构适应所有的信号,比如对于实时信号来说,则实际采用下面的结构形式:

typedef struct
{
  int si_signo;
  int si_errno;  
  int si_code;  
  union sigval si_value;
} siginfo_t;

  结构的第四个域同样为一个联合数据结构:

union sigval
{
 
推荐文章
·深刻理解Linux进程间通信(IPC)
·Linux环境进程间通信: 管道及有
 
 
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
相关分类
热点文章
·Linux环境进程间通信:
·深刻理解Linux进程间通
相关文章
·深刻理解Linux进程间通
·Linux环境进程间通信:
更多...
 
 

Copyright(c) 2001-2009 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统