Linux sigaction 用法详解

举报
Linux猿 发表于 2021/12/10 22:20:23 2021/12/10
【摘要】 CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊! 欢迎小伙伴们点赞👍、收藏⭐、留言💬
 

🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


本篇文章来讲解下 Linux sigaction 的用法,下面就来看一下吧!

一、什么是 sigaction ?

sigaction 函数能够在接到指定信号后,执行预先绑定的函数。

使用该函数需要引入下面的头文件:

#include <signal.h>

二、函数原型

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

其中,各个参数的含义如下所示:

signum :指定 sigaction 函数响应的信号,除了 SIGKILL 和 SIGSTOP 信号;

 act :如果 act 非 NULL,表示响应信号后执行的动作;

oldact:如果 oldact 非 NULL,之前的动作将保存在 oldact 中;

struct sigaction 的结构如下所示:

struct sigaction {
    void     (*sa_handler)(int);
    void     (*sa_sigaction)(int, siginfo_t *, void *);
    sigset_t   sa_mask;
    int        sa_flags;
    void     (*sa_restorer)(void);
};

其中,各个变量的含义如下所示:

sa_handler : 表示响应信号后,触发的函数; 

三、实例演示

#include <sys/param.h>
#include <rpc/types.h>
#include <strings.h>
#include <time.h>
#include <signal.h>


static void alarmHandler(int signal)
{
   printf("function alarmHandler\n");
}

int main() {

    struct sigaction sa;

    sa.sa_handler = alarmHandler;
    sa.sa_flags = 0;

    if(sigaction(SIGALRM, &sa, NULL)) {
        printf("Error: sigaction!");
    }
    alarm(1);

    sleep(10); // 延时以便触发 SIGALRM 信号后,输出alarmHandler函数中的 printf
}

四、总结

 本文主要对 Linux 中 sigaction 函数进行了介绍,该函数可以在触发指定信号后,执行指定动作,并通过实例演示说明了 sigaction 函数的应用。


CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

欢迎小伙伴们点赞👍、收藏⭐、留言💬


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。