5.27 Linux新增API:signalfd

1、实验代码

#include <sys/signalfd.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

#define handle_error(msg) \
do { perror(msg); exit(EXIT_FAILURE); } while (0)

void print_signal (struct signalfd_siginfo *siginfo)
{
    printf ("read signal: %d\n", siginfo->ssi_signo);
    printf ("sending process PID: %d\n", siginfo->ssi_pid);
}

int main (int argc, char *argv[])
{
    sigset_t mask;
    int signal_fd;
    struct signalfd_siginfo siginfo;
    ssize_t read_len;

    sigemptyset(&mask);
    sigaddset(&mask, SIGINT);
    sigaddset(&mask, SIGQUIT);

    /* Block signals so that they aren't handled
     according to their default dispositions */

    if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)
        handle_error("sigprocmask");

    signal_fd = signalfd(-1, &mask, 0);
    if (signal_fd == -1)
        handle_error("signalfd");

    for (;;) 
    {
        read_len = read(signal_fd, &siginfo, sizeof(struct signalfd_siginfo));
        if (read_len != sizeof(struct signalfd_siginfo))
            handle_error("read");

        if (siginfo.ssi_signo == SIGINT) 
            print_signal (&siginfo);
        else if (siginfo.ssi_signo == SIGQUIT) 
            print_signal (&siginfo);
        else if (siginfo.ssi_signo == SIGHUP) 
            print_signal (&siginfo);
        else
            printf("Read unexpected signal\n");
        printf ("for loop\n");
    }
}


2、实验结果
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值