- 论坛徽章:
- 0
|
请教一个问题:
按照书上说的,用alarm实现sleep函数,代码如下:
如果加入longjmp(env_alrm, 1)这句,程序会在s_sleep(2)处暂停,为什么收不到SIGARM信号?
#include <setjmp.h>
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
static jmp_buf env_alrm;
static void
sig_alrm(int signo)
{
longjmp(env_alrm, 1);
}
unsigned int
s_sleep(unsigned int seconds)
{
if(signal(SIGALRM, sig_alrm) == SIG_ERR)
return (seconds);
if(setjmp(env_alrm) == 0)
{
alarm(seconds);
pause();
}
return (alarm(0));
}
int
main()
{
s_sleep(1);
printf("sleep1\n");
s_sleep(2);
printf("sleep2\n");
}
|
|