调用alarm函数不起作用?

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

#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);
}

}


...全文
768 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenxing0407 2011-04-25
  • 打赏
  • 举报
回复
按下后才会调用alarm
chenxing0407 2011-04-25
  • 打赏
  • 举报
回复
程序运行的时候你按Ctrl+c 了吗
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
接分是王道!
mymtom 2008-04-30
  • 打赏
  • 举报
回复
程序没有任何问题呀!
只是编译有警告:
需要加:
#include <stdlib.h>
#include <string.h>

最后需要加:
return 0;
zzzkkk666 2008-04-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 babyvox1999 的回复:]
我的测试结果
./a.out
20你想终止程序吗? [10] 秒以后退出。 19 18 17 16 15 14 13 12 11 10Alarm clock
10秒后成功退出了阿。。而且是在main函数里alarm注释掉的情况下的
[/Quote]
你在没有打开这个时钟的情况下,10秒哪个时钟就可以起作用,环境差别这么大?
//alarm(5);//时钟
zzzkkk666 2008-04-23
  • 打赏
  • 举报
回复
回复看不到 ?
zzzkkk666 2008-04-22
  • 打赏
  • 举报
回复
alarm 和pause 看起来用的地方还不多,sleep倒是用的多一些
babyvox1999 2008-04-22
  • 打赏
  • 举报
回复
我的测试结果
./a.out
20你想终止程序吗? [10] 秒以后退出。 19 18 17 16 15 14 13 12 11 10Alarm clock
10秒后成功退出了阿。。而且是在main函数里alarm注释掉的情况下的
zzzkkk666 2008-04-22
  • 打赏
  • 举报
回复
还是没人回答

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧