MST

星途 面试题库

面试题:C语言中SIGINT信号处理的基础实现

在Linux环境下,使用C语言编写一个简单程序,用于捕获SIGINT信号(通常由Ctrl+C触发),并在捕获到信号后输出一条自定义的提示信息,说明程序已捕获到SIGINT信号。请描述信号处理函数的基本结构和关键步骤。
17.0万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

// 信号处理函数
void sigint_handler(int signum) {
    printf("程序已捕获到SIGINT信号\n");
}

int main() {
    // 注册SIGINT信号的处理函数
    if (signal(SIGINT, sigint_handler) == SIG_ERR) {
        perror("signal");
        return 1;
    }

    printf("按Ctrl+C触发SIGINT信号...\n");
    while (1) {
        sleep(1);
    }

    return 0;
}

信号处理函数基本结构和关键步骤:

  1. 定义信号处理函数
    • 函数原型为void handler(int signum),其中signum是接收到的信号编号。在上述代码中,sigint_handler函数就是处理SIGINT信号的函数,它输出自定义提示信息。
  2. 注册信号处理函数
    • 使用signal函数,原型为void (*signal(int signum, void (*handler)(int)))(int)。第一个参数是要捕获的信号,这里是SIGINT;第二个参数是信号处理函数的指针,即定义的信号处理函数名。在上述代码中,signal(SIGINT, sigint_handler)sigint_handler函数注册为SIGINT信号的处理函数。如果注册失败,signal函数返回SIG_ERR,需要进行错误处理。
  3. 等待信号
    • 在主程序中,通常使用一个无限循环(如while(1))让程序持续运行,等待信号的到来。在循环中可以添加其他需要持续执行的代码,这里使用sleep函数让程序休眠,避免占用过多CPU资源。