1. 程式人生 > >Unix-Linux 程式設計實踐教程 第七章 小結

Unix-Linux 程式設計實踐教程 第七章 小結

  • 設定傳送訊號的計時器---alarm()alarm()設定當前程序的計時器到seconds秒後收到由核心發來的SIGALARM訊號
  • pause()掛起呼叫程序知道一個訊號到達,如果呼叫程序被整個訊號終止,pause()則不會返回
  • 三種計時器:
    1. ITIMER_REAL---真實計時器,記錄程序的所有時間,包括使用者態時間、核心態時間以及睡眠時間。訊號量為SIGALARM。
    2. ITIMER_VIRTUAL---使用者態時間計時器,僅僅記錄程序的使用者態時間。訊號量為SIGVTALARM。
    3. ITIMER_PROF---實用計時器,記錄程序的使用者態時間+核心態時間。訊號量為SIGPROF。
  • 設定or獲取間隔計時器---getitimer(),setitimer()
  • 複雜的訊號處理設定函式---sigaction()
    struct sigaction {
                   void     (*sa_handler)(int); //SIG_DEF,SIG_IGN,或者函式
                   void     (*sa_sigaction)(int, siginfo_t *, void *); //新的訊號處理函式
                   sigset_t   sa_mask;           //當訊號處理時需要被阻塞的其他訊號集
                   int        sa_flags;          //訊號處理機制
                   void     (*sa_restorer)(void);
               };
    

  • 阻塞訊號有個兩個地點,一個是訊號處理者一級阻塞訊號(用sigaction()),第二個是在程序一級阻塞訊號(用sigprocmask())。sigprocmask()實際就是修改當前訊號擋板的設定。

  • sigset_t是訊號集型別,基本函式如下:

  • 向指定程序傳送指定訊號---kill()

  • 非同步IO:Unix有2個非同步輸入系統。一種是當輸入就緒時傳送訊號,另一種是系統當輸入被讀入時傳送訊號。UCB中通過設定檔案描述塊的O_ASYNC位來實現第一種,第二種是POSIX標準,呼叫aio_read。