Функция библиотеки C -alarm()
Стандартная библиотека 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("Получен сигнал %d: Сработал будильник\n", sig);
}
int main() {
// Установить обработчик сигнала для SIGALRM
signal(SIGALRM, handle_sigalrm);
// Установить будильник для вызова сигнала SIGALRM через 5 секунд
alarm(5);
printf("Будильник установлен на 5 секунд\n");
// Бесконечный цикл в ожидании сигнала
while (1) {
printf("Выполняется...\n");
sleep(1);
}
return 0;
}
#include <signal.h>
#include <unistd.h>
// Обработчик сигнала
void handle_sigalrm(int sig) {
printf("Получен сигнал %d: Сработал будильник\n", sig);
}
int main() {
// Установить обработчик сигнала для SIGALRM
signal(SIGALRM, handle_sigalrm);
// Установить будильник для вызова сигнала SIGALRM через 5 секунд
alarm(5);
printf("Будильник установлен на 5 секунд\n");
// Бесконечный цикл в ожидании сигнала
while (1) {
printf("Выполняется...\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, чтобы отменить ранее установленный будильник. - Обработчики сигналов должны быть как можно короче и эффективнее и выполнять только безопасные операции.