C/C++编程:信号

1060 篇文章 294 订阅

在这里插入图片描述

信号

C++标准库提供了不同的信号类型,共六种:SIGTERM, SIGSEGV, SIGINT, SIGILL, SIGABRT, SIGFPE。 在使用标准库std::signal、std::raise处理函数时,信号必须是这六种之一
在这里插入图片描述
针对这些信号,有两种不同的处理方式:SIG_DFL, SIG_IGN

在这里插入图片描述
SIG_ERR提示信号出错
在这里插入图片描述

API

std::sig_atomic_t

#include <csignal>
typedef /* unspecified */ sig_atomic_t;

作用:

  • 能从非同步信号处理函数作为原子实体访问的整数类型
  • 在引入 std::atomic 和 std::atomic_signal_fence 的 C++11 前,严格遵从程序在信号处理函数所能做的唯有赋值给 volatile static std::sig_atomic_t 变量并立即返回。

std::signal

作用:为特定信号设置信号处理函数
在这里插入图片描述
在这里插入图片描述

#include <csignal>
#include <iostream>

namespace
{
    volatile std::sig_atomic_t gSignalStatus;
}

void signal_handler(int signal){
    gSignalStatus = signal;
}

int main()
{
    // 安装信号处理函数
    std::signal(SIGINT, signal_handler);

    std::cout << "SignalValue: " << gSignalStatus << '\n';
    std::cout << "Sending signal " << SIGINT << '\n';
    std::raise(SIGINT);
    std::cout << "SignalValue: " << gSignalStatus << '\n';
}

在这里插入图片描述

std::raise

作用:为特定信号运行信号处理函数
在这里插入图片描述

#include <csignal>
#include <iostream>
 
void signal_handler(int signal)
{
    std::cout << "Received signal " << signal << '\n';
}
 
int main()
{
    // 安装信号处理函数
    std::signal(SIGTERM, signal_handler);
 
    std::cout << "Sending signal " << SIGTERM << '\n';
    std::raise(SIGTERM);
}

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值