C 库函数 - alarm()
描述
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;
}
#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 来取消先前设置的闹钟。 - 信号处理程序应尽量简短和高效,只执行安全的操作。