您的位置:首页 > 其它

转 sigaction 函数说明

2008-12-14 11:37 204 查看

转 sigaction 函数说明

LEIWEI77 发表于 2008-5-12 18:21:00
0
推荐
此文转自Angelmejlu的文章===http://blog.csdn.net/Angelmejlu/archive/2008/04/18/2305802.aspx

==============================================

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

1. sigaction原型:

#i nclude <signal.h>

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

成功则返回0, 出错则返回-1.
首先说一下struct sigaction这个结构:

structsigaction
{
void (*sa_handler)(int);

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);
{
structsigaction act, oact;

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

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

return oact.sa_hanlder;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: