Установить "будильник" для процесса
#include <unistd.h>unsigned int alarm( unsigned int seconds );
libc
Функция alarm() выполняет доставку в вызывающий её процесс сигнала SIGALRM
через указанное количество секунд реального времени. Чтобы установить обработчик данного сигнала, используйте функцию signal() или SignalAction().
|
Запросы при вызове alarm() не накапливаются, возможно запланировать генерацию только одного сигнала SIGALRM
таким методом. Если SIGALRM
ещё не был сгенерирован, вызов alarm() перепланирует время генерации сигнала SIGALRM
.
Функция возвращает количество секунд, оставшихся до момента доставки сигнала SIGALRM
, установленного предыдущим вызовом alarm(), или ноль, если предыдущие запросы отсутствуют.
Если возникла ошибка, функция возвращает (unsigned)-1
, код ошибки записывается в errno.
#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 системной библиотеки