[关闭]
@Radon 2014-12-04T01:51:04.000000Z 字数 478 阅读 1216

Homework 13

未分类


8.10

A. fork
B. execve longjmp
C. setjmp

8.23

当父进程处理第一个信号时,内核就会阻塞这个信号,第二个信号依然可以发送,之后的三个信号会被丢弃。

8.25

  1. #include <stdio.h>
  2. #include <signal.h>
  3. #include <setjmp.h>
  4. #include <unistd.h>
  5. sigjmp_buf env;
  6. void handler(int sig)
  7. {
  8. signal(SIGALRM, SIG_DFL);
  9. siglongjmp(env, 1);
  10. }
  11. char *tfgets(char *buf, int bufsize, FILE *stream)
  12. {
  13. signal(SIGALRM, handler);
  14. alarm(5);
  15. int rc = sigsetjmp(env, 1);
  16. if(rc == 0)
  17. return fgets(buf, bufsize, stream);
  18. else return NULL;
  19. }
  20. int main() {
  21. char S[100];
  22. if (tfgets(S, 100, stdin)) {
  23. printf("%s", S);
  24. }
  25. return 0;
  26. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注