Я новичок в c программировании и борюсь с заданием. Основой кода является наличие 1-секундного таймера (я использую sleep (1)), который отсчитывает, начиная с приращения 1. Каждый раз, когда я отправляю sigINT, я увеличиваю приращение на 1, и счетчик печатает с новый номер. Я использую sigterm, чтобы уменьшить число. Все это работает нормально.
Последняя часть - убить программу, если я использую sigINT дважды за одну секунду. Я попытался сделать это с «флагом», который для меня установлен в 0. Когда вызывается sigINT, увеличьте его на 1. Сделайте сброс до 0, пока l oop. Я попытался написать заявление if, что если приращение больше 1, программа остановится. Но с sleep (0) и flag = 0 сразу после этого я никогда не смогу сделать так, чтобы флаг был больше 1. Я знаю, что это, вероятно, не лучший способ сделать это, но мне не повезло в поиске лучшего решения , Любая помощь приветствуется. Спасибо.
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
int inc = 1;
int flag = 0;
void handle_sigint(int sig_num)
{
signal(SIGINT, handle_sigint);
if (inc < 10)
{
inc++;
}
flag++;
printf("\nflag=%d\n", flag);
printf("\nSIGINT received: Increment is now %d\n", inc);
fflush(stdout);
}
void handle_sigterm(int sig_num)
{
signal(SIGTERM, handle_sigterm);
if (inc > 0)
{
inc--;
}
printf("\nSIGTERM received: Increment is now %d\n", inc);
fflush(stdout);
}
int main()
{
int num = 0;
signal(SIGINT, handle_sigint);
signal(SIGTERM, handle_sigterm);
printf("Process ID: %d\n", getpid());
while (1)
{
if (flag > 1)
{
pid_t iPid = getpid();
printf("\nExiting the program now\n");
kill(iPid, SIGKILL);
}
printf("%d\n", num);
num = num + inc;
sleep(1);
flag = 0;
}
return 0;
}