您的位置:首页 > 其它

信号处理函数(3)-sigaction() 为信号注册信号捕捉函数

2018-01-02 19:25 302 查看
定义:

int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);

表头文件:

#include<signal.h>

说明:

sigaction()会依参数signum指定的信号编号来设置该信号的处理函数。参数signum可以指定SIGKILL和SIGSTOP以外的所有信号。

如参数结构sigaction定义如下

struct sigaction

{

void (*sa_handler) (int);

sigset_t sa_mask;

int sa_flags;

void (*sa_restorer) (void);

}

sa_handler: 函数指针,指定当信号到来时由哪个函数来处理,函数原型为 void foo(int);

sa_mask: 临时屏蔽字,在处理信号时,屏蔽哪些信号。

sa_flags 用来设置信号处理的其他相关操作, 可设置为0

返回值:

执行成功则返回0, 如果有错误则返回-1。

示例:

#include <stdio.h>
#include <unistd.h>
#include <signal.h>

void recv_sig(int num)
{
int n = 5;
printf("I have received a signal\n");
while(n--) {
printf("num = %d\n", num);
sleep(1);
}
}

int main()
{
struct sigaction act;
act.sa_handler = recv_sig;
sigemptyset(&act.sa_mask);
// 当处理SIGUSR1信号时,暂时屏蔽SIGQUIT信号
sigaddset(&act.sa_mask, SIGQUIT);
act.sa_flags = 0;

sigaction(SIGUSR1, &act, NULL);

while(1) {
printf("*************\n");
sleep(1);
}
return 0;
}


运行结果:

yongdaimi@iMac:~/Documents/code$ ./app
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
I have received a signal
num = 10
num = 10
num = 10
^\num = 10
num = 10
退出 (核心已转储)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: