- 论坛徽章:
- 0
|
要实现一个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);
} |
|