__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 { 
		    
                      
		      
		      
		   |