当前位置: 技术问答>linux和unix
alarm() 和 signal()的问题
来源: 互联网 发布时间:2017-01-08
本文导语: 程序如下,这个程序为什么没能捕捉到signal handler呢??请运行一下,谢谢各位大神 /** Author : kotrue * Tm&Add : 22:54:00 10/16/2011 in USTB * Notes : non-reentrant functions. */ #include #include #include #include ...
程序如下,这个程序为什么没能捕捉到signal handler呢??请运行一下,谢谢各位大神
/** Author : kotrue
* Tm&Add : 22:54:00 10/16/2011 in USTB
* Notes : non-reentrant functions.
*/
#include
#include
#include
#include
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 worldn");
strcpy(str, "WWWWWWWWWWWn");
alarm(1);
}
return 0;
}
void signal_handler(int signum)
{
printf("%s", str);
alarm(1);
}
/** Author : kotrue
* Tm&Add : 22:54:00 10/16/2011 in USTB
* Notes : non-reentrant functions.
*/
#include
#include
#include
#include
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 worldn");
strcpy(str, "WWWWWWWWWWWn");
alarm(1);
}
return 0;
}
void signal_handler(int signum)
{
printf("%s", str);
alarm(1);
}
|
alarm不可循环使用。在上一个alarm的时间没到就调用下一个alarm。则上一个alarm被打断,并返回剩余时间。
|
你while设置的alarm(1)还没来得及超时,就再次被alarm(1)打断重新设置成超时成1s,所以你的程序是alarm不断地被重新设置,却一直没有超时,所以没有捕捉到signal handler