alarm()

Установить "будильник" для процесса

Прототип:

#include <unistd.h>
unsigned int alarm( unsigned int seconds );

Аргументы:

seconds
Количество секунд реального времени до срабатывания "будильника" или ноль для отмены всех предыдущих запросов alarm().

Библиотека:

libc

Описание:

Функция alarm() выполняет доставку в вызываюший её процесс сигнала SIGALRM через указанное количество секунд реального времени. Чтобы установить обработчик данного сигнала, используйте функцию signal() или SignalAction().


Note:
  • Из-за особенностей отсчёта времени сигнал может быть послан позже указанного времени.
  • Задержки, вызванные выполнением высокоприоритетного потока, также могут привести к обработке сигнала процессом позже ожидаемого времени.

Запросы при вызове alarm() не накапливаются, возможно запланировать генерацию только одного сигнала SIGALRM таким методом. Если SIGALRM ещё не был сгенерирован, вызов alarm() перепланирует время генерации сигнала SIGALRM.

Возвращаемое значение:

Функция возвращает количество секунд, оставшихся до момента доставки сигнала SIGALRM, установленного предыдущим вызовом alarm() или ноль, если предыдущие запросы отсутствуют.

Если возникла ошибка, функция возвращает (unsigned)-1, код ошибки записывается в errno.

Коды ошибок:

EAGAIN
Все таймеры уже используются. Следует подождать освобождения таймера процессом.

Примеры:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
unsigned int timeleft;
printf( "Set the alarm and sleep\n" );
alarm( 10 );
sleep( 5 ); /* go to sleep for 5 seconds */
/*
* To get the time left before the SIGALRM is
* to arrive, one must cancel the initial timer,
* which returns the amount of time it had
* remaining.
*/
timeleft = alarm( 0 );
printf( "Time left before cancel, and rearm: %d\n", timeleft );
/*
* Start a new timer that kicks us when timeleft
* seconds have passed.
*/
alarm( timeleft );
/*
* Wait until we receive the SIGALRM signal; any
* signal kills us, though, since we don't have
* a signal handler.
*/
printf( "Hanging around, waiting to die\n" );
pause();
return (EXIT_SUCCESS);
}

Классификация:

POSIX 1003.1

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

Запросы от функций alarm(), TimerAlarm() и ualarm() не накапливаются; этими функциями можно запланировать доставку только одиного сигнала SIGALRM. Если SIGALRM ещё не был сгенерирован, следующий вызов alarm(), TimerAlarm() или ualarm() перепланирует его время генерации.

Тематические ссылки:

errno, pause(), signal(), SignalAction(), sleep(), TimerAlarm(), timer_create(), timer_delete(), timer_gettime(), timer_settime(), ualarm()




Предыдущий раздел: Описание API системной библиотеки