MST
星途 面试题库

面试题:C语言中信号处理函数的基本使用

在Linux环境下,用C语言编写一段代码,实现捕获SIGINT信号(通常由Ctrl+C产生),并在捕获到信号后打印一条自定义的提示信息,如'You pressed Ctrl+C!'。请简要解释代码中涉及的信号处理函数及参数的作用。
37.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

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

// 信号处理函数
void sigint_handler(int signum) {
    printf("You pressed Ctrl+C!\n");
}

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

    printf("Press Ctrl+C to generate SIGINT signal...\n");
    while (1) {
        sleep(1);
    }

    return 0;
}

代码中涉及的信号处理函数及参数作用:

  1. signal函数

    • 函数原型:void (*signal(int signum, void (*handler)(int)))(int);,简化后为signal(int signum, void (*handler)(int))
    • 参数signum:指定要捕获的信号类型,这里SIGINT表示中断信号,通常由Ctrl+C产生。
    • 参数handler:指定信号处理函数,当捕获到指定信号时,系统将调用该函数。它是一个函数指针,指向自定义的信号处理函数,在本代码中为sigint_handler
  2. sigint_handler函数

    • 参数signum:传递给信号处理函数的参数,它表示当前捕获到的信号值。虽然在本代码中没有用到该参数,但它提供了一种机制,使得同一个信号处理函数可以处理多种不同信号。