- 論壇徽章:
- 0
|
APUE中如下一段程序:- #include <setjmp.h>
- #include <signal.h>
- #include <unistd.h>
- static jmp_buf env_alrm;
- static void
- sig_alrm(int signo)
- {
- longjmp(env_alrm, 1);
- }
- unsigned int
- sleep2(unsigned int nsecs)
- {
- if (signal(SIGALRM, sig_alrm) == SIG_ERR)
- return(nsecs);
- if (setjmp(env_alrm) == 0) {
- alarm(nsecs); /* start the timer */
- pause(); /* next caught signal wakes us up */
- }
- return(alarm(0)); /* turn off timer, return unslept time */
- }
復(fù)制代碼 請問,當執(zhí)行pause函數(shù)之前執(zhí)行了signal的話,跳入setjmp設(shè)置的位置將如何執(zhí)行?不是繼續(xù)循環(huán)么?為什么apue中說即使pause一次都沒有執(zhí)行,該函數(shù)仍然會返回結(jié)束?此處很是疑惑~請高人解答~謝謝 |
|