alarm() 和 signal()的问题

kotrue 2011-10-16 11:30:50
程序如下,这个程序为什么没能捕捉到signal handler呢??请运行一下,谢谢各位大神

/** Author : kotrue
* Tm&Add : 22:54:00 10/16/2011 in USTB
* Notes : non-reentrant functions.
*/

#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <bits/signum.h>

void signal_handler(int signum);

// use static data structure.
static char str[20];

int main()
{
strcpy(str, "\n");
signal(SIGALRM, signal_handler);
alarm(1);
while(1)
{
printf("%s", str);
strcpy(str, "hello world\n");
strcpy(str, "WWWWWWWWWWW\n");
alarm(1);
}
return 0;
}

void signal_handler(int signum)
{
printf("%s", str);
alarm(1);
}
...全文
141 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nevil 2011-10-17
  • 打赏
  • 举报
回复
你while设置的alarm(1)还没来得及超时,就再次被alarm(1)打断重新设置成超时成1s,所以你的程序是alarm不断地被重新设置,却一直没有超时,所以没有捕捉到signal handler
谭海燕 2011-10-17
  • 打赏
  • 举报
回复
alarm不可循环使用。在上一个alarm的时间没到就调用下一个alarm。则上一个alarm被打断,并返回剩余时间。

kotrue 2011-10-17
  • 打赏
  • 举报
回复
/** Author : kotrue  
* Tm&Add : 22:54:00 10/16/2011 in USTB
* Notes : non-reentrant functions.
*/

#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <bits/signum.h>

void signal_handler(int signum);

// use static data structure.
static char str[20];

int main()
{
strcpy(str, "\n");
signal(SIGALRM, signal_handler);
alarm(1);
while(1)
{
printf("%s", str);
strcpy(str, "hello world\n");
strcpy(str, "WWWWWWWWWWW\n");
alarm(1);
}
return 0;
}

void signal_handler(int signum)
{
printf("%s", str);
alarm(1);
}
kotrue 2011-10-17
  • 打赏
  • 举报
回复
谢谢两位,明白了~~ 谢谢

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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