Linux Signal (7): sigaction

原创 2007年09月27日 17:02:00

sigaction函数是用作检查/修改与指定信号相关联的处理动作. 在UNIX早期版本中使用signal, 后来改用了sigaction, 可见它的功能比signal要强大. 另外, signal函数也是可以用sigaction实现的.

1. sigaction原型:

#include <signal.h>

int sigaction(int signo, const struct sigaction *restrict act, 
                               struct sigaction *restrict oact);

成功则返回0, 出错则返回
-1.

首先说一下struct sigaction这个结构:

struct sigaction
{
    
void (*sa_handler)(int); /* addr of signal handler or 
                                SIG_IGN, SIG_DFL */
    sigset_t sa_mask;       
/* additional signals to block */
    
int sa_flags;            /* signal options */

    
/* alternate handler */
    
void (*sa_sigaction)(int, siginfo_t *void *);
};
  • sa_hanlder: 一个带有int参数的函数指针, 或者SIG_IGN(忽略), 或者SIG_DFL(默认).
  • sa_mask: 信号屏蔽字(集). 当该信号处理函数返回时, 屏蔽字恢复.
  • sa_sigaction: 替代的信号处理程序, 当使用了SA_SIGINFO标志时, 使用该信号处理程序.

对于sa_flags和siginfo结构, 具体参考APUE 262页.

2. 实例:

用sigaction实现signal:

typedef void (*sig_func)(int);

sig_func 
*signal(int signo, sig_func *
func);
{
    
struct
 sigaction act, oact;

    act.sa_handler 
=
 func;
    sigemptyset(
&
act.sa_mask);
    act.sa_flags 
= 0
;

    
if (sigaction(signo, &act, &oact) < 0
)
        
return
 SIG_ERR;

    
return
 oact.sa_hanlder;
}

相关文章推荐

Linux信号(signal、sigaction) 机制分析

【摘要】本文分析了Linux内核对于信号的实现机制和应用层的相关处理。首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理。接着分析了内核对于信号的处理流程包括信号的触发/注册/执...

linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉(转)

linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉

linux信号处理之signal、sigaction、alarm、pause函数

信号相关的东西都在  /usr/include/singnal.h里 各种信号的定义的都在 /usr/include/i386-linux-gnu/bits/signum.h         3....

linux进程信号处理函数signal和sigaction

Linux中signal函数说明: NAME        signal - ANSI C signal handling SYNOPSIS        #include        t...

linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉

http://blog.csdn.net/lanmanck/article/details/4568911 来自:http://hi.baidu.com/phenix_yw/blog/item/...

linux c 之signal 和sigaction区别 (转载)

linux c 之signal 和sigaction |字号 订阅 http://blog.csdn.net/muge0913/article/details/...

Linux信号,signal和sigaction(一)

信号是Unix和Linux系统响应某些条件而产生的一个事件。接收到该信号的进程会相应地采取一些操作。每个信号都有一个数字编码。           实例:Ctrl-C的工作原理         1.用...

linux 0.11版本内核中信号signal()和sigaction()的区别

记录下我对这两个有关信号程序的理解,signal()和sigaction()主要用来设置针对某一信号的处理程序,这两个系统调用会首先会在进程自己的任务数据结构中设置sigaction[]结构数组,该元...

Linux信号signal介绍,signal()函数,sigaction()函数

signal( SIGINT, SigIntHandler ); /* Ctrl-C handler */       static int     b_ctrl_c = 0;       st...

signal函数、sigaction函数及信号集操作函数

信号是与一定的进程相联系的。也就是说,一个进程可以决定在进程中对哪些信号进行什么样的处理。例如,一个进程可以忽略某些信号而只处理其他一些信号;另外,一个进程还可以选择如何处理信号。总之,这些总与特定的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux Signal (7): sigaction
举报原因:
原因补充:

(最多只允许输入30个字)