10_11alarm函數的作用修復系統自己重啓。

使用這種方法無需擔心,一個慢速的系統調用是否被中斷。

一、源代碼:

 1  #include "apue.h"
     2  #include <setjmp.h>
     3
     4  static void sig_alarm(int sig_no);
     5  static jmp_buf env_alrm;
     6  int main()
     7  {
     8          int n;
     9          char line[MAXLINE];
    10
    11          if (setjmp(env_alrm) != 0)
    12                  err_quit("read timeout");
    13          if (signal(SIGALRM,sig_alarm) == SIG_ERR){
    14                  err_sys("signal SIGALRM handler creation error");
    15          }
    16
    17          alarm(10);
    18
    19          if ((n=read(STDIN_FILENO,line,MAXLINE)) < 0)
    20                  err_sys("read error");
    21
    22          alarm(0);
    23
    24          write(STDOUT_FILENO,line,n);
    25          exit(0);
    26  }
    27
    28
    29
    30  static void sig_alarm (int sig_no)
    31  {
    32          longjmp(env_alrm,1);
    33  }



2.運行結果:

./avoid_restart
read timeout

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章