MST

星途 面试题库

面试题:C语言中Linux定时器信号处理的基本实现

请简述在Linux环境下,如何使用C语言创建一个简单的定时器,并关联相应的信号处理函数。请给出关键的函数调用及简单代码示例。
36.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 关键函数调用
    • signal函数:用于设置信号处理函数。原型为void (*signal(int signum, void (*handler)(int)))(int);signum是信号编号,handler是信号处理函数指针。
    • alarm函数:用于设置一个定时器(闹钟),以秒为单位。原型为unsigned int alarm(unsigned int seconds);。当定时器到期时,会向进程发送SIGALRM信号。
  2. 简单代码示例
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

// 信号处理函数
void signal_handler(int signum) {
    printf("Received SIGALRM signal.\n");
}

int main() {
    // 设置信号处理函数
    signal(SIGALRM, signal_handler);

    // 设置定时器,5秒后触发
    alarm(5);

    printf("Waiting for alarm to go off...\n");
    // 防止程序退出
    while(1);

    return 0;
}

在上述代码中:

  • 首先定义了signal_handler函数,它是SIGALRM信号的处理函数。
  • main函数中,使用signal函数将SIGALRM信号与signal_handler函数关联起来。
  • 然后使用alarm函数设置一个5秒的定时器。
  • 最后通过一个无限循环while(1)防止程序退出,以便等待定时器触发信号。当5秒后,SIGALRM信号被发送,signal_handler函数被调用,输出相应信息。