信号の処理について質問があります。SIGINT シグナルを受信した場合、"Recieved Signal" を出力する必要があると仮定します。10 秒以内にハンドラーが別のシグナルを受信した場合、ハンドラーは "Shutting Down" を出力し、ステータス 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 を無視する必要がありますか?