У меня вопрос по поводу обработки сигнала.
Предположим, что если мы получаем сигнал SIGINT, мы должны напечатать «Полученный сигнал». Если в течение десяти секунд обработчик получает другой сигнал, он должен напечатать «Выключение», а затем выйти со статусом 1.
Я сделал свой код так:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void handler(int);
void secondhandler(int);
void alrmhandler(int);
void alrmhandler (int alrmsig)
{
alarm(0);
}
void secondhandler(int sig)
{
/* after recieving second signal prints shutting down and exit */
printf("Shutting Down\n");
exit(1);
}
void handler ( int sig )
{
/* recieve first SIGINT signal */
printf ("Recieved Signal\n");
/* handle for the alarm function */
signal(SIGALRM, alrmhandler);
/* start 10s alarm */
alarm(10);
/* catch second SIGINT signal within 10s*/
signal(SIGINT, secondhandler);
}
int main( void )
{
signal(SIGINT, handler);
printf( "Hello World!\n" );
for ( ;; )
{
/* infinite loop */
}
return 0;
}
Я пытался скомпилировать его с помощью dev c ++, но это не удалось. Поскольку SIGALRM необъявлен (первое использование в этой функции).
В любом случае, я хочу знать, верен ли этот код. Я на самом деле вроде не уверен с alrmhandler (). я должен игнорировать SIGALRM?