C infinte while循环中的信号

C infinte while循环中的信号,c,linux,signals,handler,C,Linux,Signals,Handler,我完全被封锁了。我试图修改C中的“报警”信号,以便在秒数到期时读取一个简单变量。我的代码如下: 大体上: int semnal; signal(SIGALRM, alarmHandler); setbuf(stdout, NULL); alarm(5); while(flag!=0) { mymenu(); } mymenu()函数: void mymenu() { int optiune; printf("%s", "My menu

我完全被封锁了。我试图修改C中的“报警”信号,以便在秒数到期时读取一个简单变量。我的代码如下:

大体上:

int semnal;
   signal(SIGALRM, alarmHandler);
   setbuf(stdout, NULL);
    alarm(5);
    while(flag!=0)
    {
    mymenu();
    }
mymenu()函数:

void mymenu()
{
  int optiune;
  printf("%s", "My menu\n");
  scanf("%i", &optiune);
}
我的处理函数:

void alarmHandler(int sig)
    {    
        int speed;
        printf("\nparent signal alarm handler: times up\n");
        scanf("%i", &speed);
        if(speed<0)
        {
          exit(0);
          flag=0;
        }
        else 
        {
          flag++;
          alarm(5);
        }
    }
void报警处理程序(int-sig)
{    
整数速度;
printf(“\n租金信号报警处理程序:超时\n”);
扫描频率(“%i”和速度);

如果(速度我想我明白你想做什么,首先想想:

{
   exit(0);
   flag=0;
}
该标志不会设置为0,因为您的程序将首先退出。 回答您的问题时,这种情况会发生在您身上,因为当调用报警时,该功能正在运行,此时会被中断并设置为失败,在调用后,您的程序将在下一行继续运行

我建议您使用SIGInterupt with 0标志,是一个允许您尝试重新运行的调用,相同的函数在报警调用后被中断


祝你好运,告诉我们结果!

非常感谢!它很有效!但我将标志设置为不同于0的值,而不是0