免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1033 | 回复: 1
打印 上一主题 下一主题

求助! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-01 16:10 |只看该作者 |倒序浏览
要实现一个3秒的计数,不知道为什么只计数一次,然后一直停在了pause
是因为跳转之后不能执行alarm,还是因为信号设置有问题
谢谢,请赐教


#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <setjmp.h>

static jmp_buf env_alrm;
                                                                                                                  
static void sig_alrm(int);
int MAXLINE = 20;
                                                                                                                  
int
main(void)
{
        int n,i = 0;
        char line[MAXLINE];
                                                                                                                  
        if (signal (SIGALRM, sig_alrm) == SIG_ERR)
                printf("signal (SIGALARM) error \n");
                                                                                                                  
        struct sigaction act, oact;
                                                                                                                  
        act.sa_handler = sig_alrm;
        sigemptyset(&act.sa_mask);
        act.sa_flags = 0;
                                                                                                                  
        sigaction(SIGALRM, &act, &oact);
                                                                                                                  
        if (setjmp(env_alrm) !=0)
                printf("read error\n");
        i++;
        printf("%d\n", i);
        while(1){
                alarm(3);
                pause();
        }
//      if ((n = read(STDIN_FILENO, line, MAXLINE)) < 1)
                printf("read error\n");
        alarm(0);
                                                                                             
                                                                                                                  
        write(STDOUT_FILENO, line, n);
        exit(0);
}
static void
sig_alrm (int signo)
{
        longjmp (env_alrm, 1);
}

论坛徽章:
0
2 [报告]
发表于 2007-04-02 20:40 |只看该作者
看看这个:也许能够解决你的问题
http://bbs.chinaunix.net/viewthr ... 2&highlight=set
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP