Chinaunix
标题:
apue中10.6节例子,signal(SIGALRM, my_alarm)执行不了,为啥?
[打印本页]
作者:
dothingsbyjava
时间:
2011-08-08 23:33
标题:
apue中10.6节例子,signal(SIGALRM, my_alarm)执行不了,为啥?
本人在CentOs5.3中试过,就是一直死循环,郁闷。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <pwd.h>
#include <error.h>
static void my_alarm(int signo)
{
struct passwd *rootptr;
printf("in signal handler\n");
if ((rootptr = getpwnam("root")) == NULL)
{
printf("getpwnam(root) error");
}
alarm(1);
return;
}
int main(void)
{
struct passwd *ptr;
signal(SIGALRM, my_alarm);
while(1)
{
if ((ptr = getpwnam("foxhunt")) == NULL)
{
printf("getpwnam error\n");
}
if (strcmp(ptr->pw_name, "foxhunt") != 0)
{
printf("return value corrupted!, pw_name=%s\n", ptr->pw_name);
}
}
return 0;
}
复制代码
作者:
dothingsbyjava
时间:
2011-08-10 19:56
{:3_199:}没人理我。。。
作者:
whaaat
时间:
2011-08-11 09:59
不需要调用alarm()么?
作者:
hailongxl
时间:
2011-08-11 10:09
while(1)循环中加入usleep(1000*1000);
作者:
jiayanfu
时间:
2011-08-11 10:40
额。。。你的alarm在主函数为什么不调用呢。。。。是不是在“signal(SIGALRM, my_alarm);“之后应该“alarm(1)”呢。。。。。。楼主。。。。。是不是呢。。。{:2_167:}
作者:
jiayanfu
时间:
2011-08-11 10:56
还有你的while里边是不是应该睡一会儿呢。。。我怕cpu吃不消啊{:2_166:}。。。 我帮你测试过了,这样修改完了就可以正常的发出SIGALRM了
作者:
dothingsbyjava
时间:
2011-08-11 12:48
谢谢楼上各位的回答,确实漏写了alarm(),谢谢了,我回去再试试。{:3_189:}
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2