百度空间 | 百度首页 
 
查看文章
 
struct sigaction
2007年06月14日 星期四 16:38
struct sigaction (k_sigaction.sigaction)
struct k_sigaction {
    struct sigaction sa;
};


    对于用户空间的头文件而言,struct sigaction定义在 /usr/include/bits/sigaction.h,此头文件又被/usr/include/signal.h包含,所以应用程序中如果用到此 结构,只要#include <signal.h>即可。注意内核中的定义和应用程序中的定义是不一样的,内核空间的sigaction结构只支持函数类型为 __sighandler_t的信号处理函数,不能处理信号传递的额外信息。


linux-2.6.12.1/include/asm-i386/signal.h
----------------------------------------------
#ifdef __KERNEL__
struct old_sigaction {
    __sighandler_t sa_handler;
    old_sigset_t sa_mask;
    unsigned long sa_flags;
    __sigrestore_t sa_restorer;
};

struct sigaction {
    __sighandler_t sa_handler;
    unsigned long sa_flags;
    __sigrestore_t sa_restorer;
    sigset_t sa_mask;       /* mask last for extensibility */
};

struct k_sigaction {
    struct sigaction sa;
};
#else

Here we must cater to libcs that poke about in kernel headers.
用户程序使用sigaction结构体时用这个声明,内核程序使用sigaction结构体时用
上面那个声明
struct sigaction {
    union {
      __sighandler_t _sa_handler;
      void (*_sa_sigaction)(int, struct siginfo *, void *);
    } _u;
    sigset_t sa_mask;
    unsigned long sa_flags;
    void (*sa_restorer)(void);
};

#define sa_handler   _u._sa_handler
#define sa_sigaction _u._sa_sigaction





----------------------------------------------
sigaction.sa_flags    控制内核对该信号的处理标记
    SA_NODEFER        一般情况下, 当信号处理函数运行时,内核将阻塞<该给定信号 -- SIGINT>。但是如果设置了SA_NODEFER标记, 那么在该信号处理函数运行时,内核将不会阻塞该信号。 SA_NODEFER是这个标记的正式的POSIX名字(还有一个名字SA_NOMASK,为了软件的可移植性,一般不用这个名字)   
    SA_RESETHAND     当调用信号处理函数时,将信号的处理函数重置为缺省值。 SA_RESETHAND是这个标记的正式的POSIX名字(还有一个名字SA_ONESHOT,为了软件的可移植性,一般不用这个名字)
    SA_SIGINFO       信号处理函数是带有三个参数的
sa_sigaction

sigaction.sa_mask
   某信号(signum)的信号处理函数运行时阻塞的额外信号集合(该函数运行期间阻塞的信号集合)。当调用该信号处理函数时,阻塞信号的总集合将是由进程 信号掩码中的那些信号(task_struct.blocked)与act.sa_mask中的那些信号以及signum(如果清除了 SA_NODEFER)的并集构成

注: 阻塞的意思是延迟相应信号




类别:信号处理 | 添加到搜藏 | 浏览() | 评论 (1)
 
最近读者:
 
网友评论:
1
2008年04月20日 星期日 15:39 | 回复
good
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu