欢迎您 本站地址:  

C 库函数 - sigaction()

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

sigaction 函数是 C 标准库中的一个函数,用于检查或修改与特定信号相关联的处理动作。与 signal 函数相比,sigaction 提供了更多的控制和更好的移植性。

语法

int sigaction(int sig, const struct sigaction *act, struct sigaction *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_flags 的常见选项

返回值

实例

以下是一个简单的示例程序,演示如何使用 sigaction 函数设置 SIGINT 信号的处理程序:

实例

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

// 自定义的信号处理函数
void handle_sigint(int sig) {
    printf("Caught signal %d\n", sig);
}

int main() {
    struct sigaction sa;

    // 设置处理程序为 handle_sigint
    sa.sa_handler = handle_sigint;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;

    // 使用 sigaction 设置新的信号处理动作
    if (sigaction(SIGINT, &sa, NULL) == -1) {
        perror("sigaction");
        return 1;
    }

    // 主循环,持续运行直到捕捉到信号
    while (1) {
        printf("Running...\n");
        sleep(1);
    }

    return 0;
}

编译并运行程序后,输出将是:

Running...
Running...
Running...
...

当按下 Ctrl+C(发送 SIGINT 信号)时,输出将是:

Caught signal 2

程序捕捉到 SIGINT 信号并执行了自定义的信号处理函数 handle_sigint,然后继续运行主循环。

注意事项

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

小库提示

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