MST

星途 面试题库

面试题:C语言中Linux信号处理函数的基本结构

在Linux环境下,用C语言编写一个简单的信号处理函数框架,处理SIGINT信号(通常由Ctrl+C触发),要求在函数内打印一条提示信息表明捕获到该信号。并简要说明信号处理函数的一般编写步骤。
11.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

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

// 信号处理函数
void sigint_handler(int signum) {
    printf("Caught SIGINT signal.\n");
}

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

    printf("Waiting for SIGINT signal...\n");
    while (1) {
        // 程序在此处循环等待信号
    }

    return 0;
}

信号处理函数一般编写步骤:

  1. 定义信号处理函数:该函数接受一个int类型参数,用于表示接收到的信号编号。在函数体内编写处理信号的逻辑,如上面示例中的打印提示信息。
  2. 注册信号处理函数:使用signal函数(POSIX标准)或者sigaction函数(更强大,可设置更多属性)来将定义好的信号处理函数与特定信号进行关联。例如上述代码中使用signal(SIGINT, sigint_handler)sigint_handler函数与SIGINT信号关联。如果注册失败,signal函数会返回SIG_ERR,需要进行错误处理。
  3. 程序等待信号:在注册好信号处理函数后,程序通常会进入一个循环(如示例中的无限循环)等待信号的到来,当信号到来时,系统会暂停当前正在执行的代码,跳转到信号处理函数执行,执行完毕后继续回到原来暂停的位置继续执行。