alarm函数

场景:调用alarm函数不起作用?解决方案

调用alarm函数不起作用?
alarm 闹钟只能有一个,主函数中有两个alarm的时候,后一个alarm会把前一个alarm的剩余时间作为返回值,然后自己重新从0开始计数,前一个alarm就此成为历史。以上都测试成功了。
然而当我在sigaction的信号响应函数里调用alarm的时候,alarm函数不起作用。然后我在main函数里先调用一个alarm,然后再在sigaction的信号响应函数里调用alarm,此时后一个alarm终于可以以第二个时钟函数的身份闪亮登场了。
我的问题是:在sigaction的信号响应函数里调用alarm的时候,alarm函数为什么不起作用呢?sigaction捕捉的是ctrl+c。
代码如下
C/C++ code

#include <signal.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h> //STDERR_FILENO

#define PROMPT "你想终止程序吗? " 
#define N 20
#define M 10
char *prompt=PROMPT; 

void ctrl_c_op(int signo) 
{     
    write(STDERR_FILENO, prompt, strlen(prompt));
    alarm(M);//时钟,M秒后退出
    printf("[%d] 秒以后退出。", M);fflush(NULL);
} 

int main() 
{ 
    int i;
    struct sigaction act; 

    act.sa_handler=ctrl_c_op; //注册信号处理函数,信号的默认动作被屏蔽
    sigemptyset(&act.sa_mask); 
    act.sa_flags=0;
    //alarm(5);//时钟
    if(sigaction(SIGINT, &act, NULL)<0) 
    { 
        fprintf(stderr,"Install Signal Action Error:%s\n\a",strerror(errno)); 
        exit(1); 
    }
    for(i=0; i<N; i++)
    {        
        sleep(1);
        printf("%4d", N-i);fflush(NULL);
    }

} 





------解决方案--------------------
我的测试结果
./a.out
20你想终止程序吗? [10] 秒以后退出。 19 18 17 16 15 14 13 12 11 10Alarm clock
10秒后成功退出了阿。。而且是在main函数里alarm注释掉的情况下的
------解决方案--------------------
程序没有任何问题呀!
只是编译有警告:
需要加:
#include <stdlib.h>
#include <string.h>

最后需要加:
return 0;