201
Бұл мәселені шешу үшін UNIX-те жүйелік шақырту alarm()
анықталады:
#include
unsigned int alarm(unsigned int time_interval);
Секундпен берілген, time_interval уақыт интервалының аяқталуы
бойынша alarm() фукнциясын шақыртқаннан кейін ядро осы
функцияны шақыртқан процеске SIGALRM сигналын жібереді.
Егер alarm() функциясын уақыт интервалы аяқталмай шақыртқан
болса онда функция time_interval параметрімен берілген жаңа интервал
қояды және бұрынғы интервалдың аяқталуына дейінгі қалған секунд
санын қайтарады. Егер time_interval параметрінің мәні осы кезде нөлге
тең болса, онда жіберілім болдырылмайды.
Аlarm() функциясы берілген уақыт аралығының аяқталуына
байланысты процессті дұрыс аяқтау үшін қолданылауы мүмкін. Ол
үшін процестің орындалуын аяқтайтын SIGALRM сигналын анықтау
және бағдарламаның орындалуы басында alarm() функциясын шақыру
жеткілікті. Мысалы, іске қосылғаннан 20 сек өткеннен кейін аяқтау
үшін функцияны қолданылатын бағдарламалар мыналар:
#include
#include
void hdlrAlarm(int sig_no)
{
printf("Execution terminating\n"); exit(0);
}
void hdlrInt(int sig_no)
{
signal( sig_no, &hdlrInt ) ; printf("Signal %d
caught\n", sig_no);
}
int main()
{
signal( SIGINT, &hdlrInt); signal( SIGALRM, &hdlrAlarm);
printf("Timer started\n"); alarm(20); while (1)
{
printf("Waiting...\n");
pause();
}
return 0;
}
Тапсырмалардан бағдарламаны іске қосуы кезінде (signal6
орындалатын файлдың атауымен):