MST

星途 面试题库

面试题:C语言中Linux定时器时间单位从秒转换为毫秒的实现

在Linux环境下,若已有一个以秒为单位设置的定时器,现要求将其时间单位转换为毫秒,请编写一段C语言代码实现该功能,并简述实现思路。
48.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 由于原定时器是以秒为单位,要转换为毫秒单位,需要将定时器的计数值乘以1000。
  2. 使用setitimer函数来设置新的定时器,setitimer函数可以设置定时器的间隔时间和首次触发时间。
  3. 注册一个信号处理函数,当定时器到期时,内核会发送信号给进程,进程执行信号处理函数。

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>

// 信号处理函数
void timer_handler(int signum) {
    printf("Timer expired!\n");
}

int main() {
    struct itimerval new_value;
    struct sigaction sa;

    // 初始化信号处理
    sa.sa_handler = timer_handler;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;
    if (sigaction(SIGALRM, &sa, NULL) == -1) {
        perror("sigaction");
        return 1;
    }

    // 设置定时器间隔,假设原来定时器间隔为1秒,转换为1000毫秒
    new_value.it_interval.tv_sec = 0;
    new_value.it_interval.tv_usec = 1000000; // 1000毫秒
    new_value.it_value.tv_sec = 0;
    new_value.it_value.tv_usec = 1000000; // 首次触发时间也为1000毫秒

    // 设置定时器
    if (setitimer(ITIMER_REAL, &new_value, NULL) == -1) {
        perror("setitimer");
        return 1;
    }

    // 防止进程退出
    while (1) {
        pause();
    }

    return 0;
}