@Radon
2014-12-04T01:51:04.000000Z
字数 478
阅读 1216
未分类
A. fork
B. execve longjmp
C. setjmp
当父进程处理第一个信号时,内核就会阻塞这个信号,第二个信号依然可以发送,之后的三个信号会被丢弃。
#include <stdio.h>
#include <signal.h>
#include <setjmp.h>
#include <unistd.h>
sigjmp_buf env;
void handler(int sig)
{
signal(SIGALRM, SIG_DFL);
siglongjmp(env, 1);
}
char *tfgets(char *buf, int bufsize, FILE *stream)
{
signal(SIGALRM, handler);
alarm(5);
int rc = sigsetjmp(env, 1);
if(rc == 0)
return fgets(buf, bufsize, stream);
else return NULL;
}
int main() {
char S[100];
if (tfgets(S, 100, stdin)) {
printf("%s", S);
}
return 0;
}