#include<stdio.h>
#include<setjmp.h>
#include<signal.h>
jmp_buf env;
void alarmHandler()
{
printf("\n in alarm Handle");
longjmp(env,1);
}
int main()
{
signal(SIGALRM,alarmHandler);
alarm(2);
for(;;)
{
printf("\nhello");
sleep(1);
if(setjmp(env))
{
printf("\n inside if");
signal(SIGALRM,alarmHandler);
alarm(2);
}
}
return 0;
}
起動時に信号がアクティブになってからアクティブアラームが2秒間カウントダウンされます。 for
ループ内では、たびに保存されます。setjmp(env)
は、最後にsetjmp(env)
の時間が終了するとlongjmp()
を使用して呼び出されます。 setjmp()
は、longjmp()
から呼び出された場合、デフォルトで0を返します.2番目のarg値は何でも、その値が返されます。SIGALRMが2度目に動作しないのはなぜですか?
コードをインデントしてください。インデントされていないときは、読みにくいです! –
'setjmp()'は最初に呼び出されたときにゼロを返し、 'longjmp()'からの戻り値がゼロでないときにはゼロを返します。あなたの 'printf()'も改行で終わらせるべきです。それ以外の場合は、出力が表示されないことがあります。 –
@JonathanLefflerは 'printf()'の変更を行ってもまだ動作しません! – neileap