现在位置: 首页 > C 教程 > 正文

C 库函数 - alarm()

C 标准库 - <signal.h> C 标准库 - <signal.h>

描述

alarm 函数是 C 标准库中的一个函数,用于在指定的时间后发送 SIGALRM 信号给调用进程。此函数定义在 <unistd.h> 头文件中。

语法

unsigned int alarm(unsigned int seconds);

参数

  • unsigned int seconds:指定在多少秒后发送 SIGALRM 信号。如果参数为 0,则取消任何先前设置的闹钟。

返回值

  • 成功时返回先前设置的闹钟剩余的时间(以秒为单位)。
  • 如果没有先前设置的闹钟,返回 0。

实例

以下是一个使用 alarm 函数设置闹钟,并处理 SIGALRM 信号的示例程序。该程序在 5 秒后发送 SIGALRM 信号,并在捕获到信号时执行相应的信号处理程序。

实例

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

// 信号处理程序
void handle_sigalrm(int sig) {
    printf("Caught signal %d: Alarm triggered\n", sig);
}

int main() {
    // 设置 SIGALRM 的信号处理程序
    signal(SIGALRM, handle_sigalrm);

    // 设置闹钟,在 5 秒后触发 SIGALRM 信号
    alarm(5);
    printf("Alarm set for 5 seconds\n");

    // 无限循环,等待信号
    while (1) {
        printf("Running...\n");
        sleep(1);
    }

    return 0;
}

运行以上示例程序可能的输出结果如下:

Alarm set for 5 seconds
Running...
Running...
Running...
Running...
Running...
Caught signal 14: Alarm triggered

程序设置一个 5 秒的闹钟,并在捕获到 SIGALRM 信号时执行 handle_sigalrm 信号处理程序,输出相应的消息。

解释

  • signal(SIGALRM, handle_sigalrm);:设置 SIGALRM 的信号处理程序为 handle_sigalrm
  • alarm(5);:设置闹钟,在 5 秒后发送 SIGALRM 信号。
  • 程序进入无限循环,每秒打印一次 Running...,直到捕获到 SIGALRM 信号,执行信号处理程序并打印 Caught signal 14: Alarm triggered

注意事项

  • alarm 函数设置的闹钟会在指定时间后发送 SIGALRM 信号给调用进程。
  • 可以通过再次调用 alarm 函数并传递参数 0 来取消先前设置的闹钟。
  • 信号处理程序应尽量简短和高效,只执行安全的操作。

C 标准库 - <signal.h> C 标准库 - <signal.h>