程序對訊號的處理有預設動作。預設處理是終止程序。
對訊號的處理有3種方式:預設處理,忽略訊號,使用者自定義
sig_dfl:預設
sig_ign:忽略
doit(這裡的名字自己定義,doit只是為了佔位):使用者自定義的訊號處理函式
子程序從父程序繼承訊號處理函式
bash的訊號繼承是預設處理(終止程序)
系統提供了用來改變訊號的處理函式signal(2)
#include
typedef
void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
功能:引數:
signum:指定了訊號的編號
handler:指定了signum訊號的處理函式
sig_dfl sig_ign 使用者自定義
sig_err 錯誤
舉例說明:編碼實現程序忽略2號訊號,(signal2.c)
#include
int main(void)
tarena@ubuntu:~/day/day32$ a.out
^c^c^c^c^c^c^c^c^\退出 (核心已轉儲)
分析: 輸入ctrl+c是停止不了的 ctrl+\可以終止
這裡的2號訊號已經被自定義,相當於忽略
舉例: 編碼實現程序對2號訊號的處理採用使用者自定義函式(signal_2u.c)
#include
#include
//函式的引數是訊號的編號
void doit(int n)
int main(void)
命令: tarena@ubuntu:~/day/day32$ a.out
結果: ^crecv...2
^crecv...2
^crecv...2
C語言 unix c 訊號基礎
二 訊號的基礎 1 什麼是訊號 訊號就是 軟中斷 軟中斷就是軟體模擬的中斷機制。2 中斷是什麼 正常的執行流程,訊號處理程式是兩條執行路線,但是屬於同乙個程序 3 系統為我們提供了哪些訊號?kill l 察看系統的中斷 64個訊號,32,33沒有 tarena ubuntu kill l 1 sig...
C語言 unix c 訊號阻塞和未決訊號
五 訊號阻塞和未決訊號 訊號集型別 sigset t 系統對sigset t型別進行了封裝 include int sigemptyset sigset t set 功能 初始化訊號集,不包含任何訊號 引數 set 指定要初始化的訊號集 返回值 0 成功 1 錯誤 int sigfillset si...
C語言 unix c 動態載入
動態載入 在程式中根據程式的需要,動態載入某個庫函式,這種行為稱為動態載入,系統為實現動態載入提供了一下函式 man 3 dlopen顯示幫助 標頭檔案 include void dlopen const char filename,int flag 引數 filename 制定了動態庫的檔案名字 ...