欢迎您 本站地址:  

C 库函数 - sigprocmask()

C 标准库 - <signal.h> C 标准库 - <signal.h>

描述

在C语言中,sigprocmask函数用于检查或修改当前进程的信号屏蔽字(signal mask)。信号屏蔽字决定了在屏蔽期间哪些信号会被阻塞,即暂时不会被处理。

语法

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

参数

返回值

示例

以下是一个简单的示例程序,演示如何使用 sigprocmask 函数来阻塞 SIGINT 信号,然后解除阻塞并查看之前的信号屏蔽字:

实例

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

int main() {
    sigset_t new_mask, old_mask;
   
    // 初始化新信号集,只包含 SIGINT
    sigemptyset(&new_mask);
    sigaddset(&new_mask, SIGINT);

    // 设置新的信号屏蔽字,阻塞 SIGINT 信号
    if (sigprocmask(SIG_BLOCK, &new_mask, &old_mask) == -1) {
        perror("sigprocmask");
        return 1;
    }

    printf("SIGINT signal is blocked. Sleeping for 5 seconds...\n");
    sleep(5);

    // 解除对 SIGINT 的阻塞
    if (sigprocmask(SIG_UNBLOCK, &new_mask, NULL) == -1) {
        perror("sigprocmask");
        return 1;
    }

    printf("SIGINT signal is unblocked.\n");

    return 0;
}

输出结果

运行以上示例程序可能的输出结果如下:

SIGINT signal is blocked. Sleeping for 5 seconds...

在此期间,SIGINT 信号被阻塞,因此程序会等待 5 秒钟。

SIGINT signal is unblocked.

然后,程序解除了对 SIGINT 信号的阻塞,恢复正常处理该信号。

注意事项

C 标准库 - <signal.h> C 标准库 - <signal.h>

小库提示

扫描下方二维码,访问手机版。