1

私は次のコードに取り組んでいます。プログラムは、sigaction で SIGINT を処理できる必要があります。これまでのところ、ほぼ完了していますが、2 つの問題が発生しました。
最初の問題は、3 秒以内に 3 つのシグナルを受信した場合、プログラムが「シャットダウン中」と出力してステータス 1 で終了することです。
2 番目の問題は、gettimeofdaystruct timevalを使用してシグナルの到着時間に関する秒単位の時間を取得していることですが、ここでも失敗しました。 試してみると、 3秒以内にctrl+3回押したつもりでも無限ループに陥ってしまいました。Cまた、結果の秒数は非常に大きな数値です。
誰かがこれら2つの問題を解決するのを手伝ってくれることを願っています. これがコードです

int timeBegin = 0;

void sig_handler(int signo) {
   (void) signo;
   struct timeval t;
   gettimeofday(&t, NULL);
   int timeEnd = t.tv_sec + t.tv_usec;

   printf("Received Signal\n");

   int result = timeEnd - timeBegin;

   if(check if under 3 seconds) {  // How to deal with these two problems?
       printf("Shutting down\n");
       exit(1);
   }
   timeBegin = timeEnd   // EDIT: setting the time new, each time when a signal arrives. Is that somehow helpful?
}

int main() {
    struct sigaction act;
    act.sa_handler = &sig_handler;
    sigaction(SIGINT, &act, NULL);

    for( ;; ) {
        sleep(1);
    }
    return 0;
}
4

1 に答える 1