Unix-Linux 程式設計實踐教程 第七章 小結
阿新 • • 發佈:2018-11-25
- 設定傳送訊號的計時器---alarm()alarm()設定當前程序的計時器到seconds秒後收到由核心發來的SIGALARM訊號
- pause()掛起呼叫程序知道一個訊號到達,如果呼叫程序被整個訊號終止,pause()則不會返回。
- 三種計時器:
- ITIMER_REAL---真實計時器,記錄程序的所有時間,包括使用者態時間、核心態時間以及睡眠時間。訊號量為SIGALARM。
- ITIMER_VIRTUAL---使用者態時間計時器,僅僅記錄程序的使用者態時間。訊號量為SIGVTALARM。
- 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。