4

信号の処理について質問があります。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 を無視する必要がありますか?

4

2 に答える 2

3

Windows プラットフォームを使用している場合、送信できるシグナルは、SIGABRT、SIGFPE、SIGILL、SIGINT、SIGSEGV、または SIGTERM のみです。

于 2011-12-01T15:12:04.390 に答える