訊號方式
軟中斷訊號signal,簡稱訊號,用來通知程序發生了非同步時間。
程序之間可以通過系統呼叫kill等函式來傳送軟中斷訊號,通知程序發生了某個事件,但訊號只能用來通知程序發生了什麼事件,並不給該程序傳遞任何資料。
訊號是非同步的,乙個程序不必通過任何操作來等待訊號的到達
訊號處理的三個過程:傳送訊號、接收訊號、處理訊號
訊號處理的三種方式:
一、使用
二、演示程式
1、程式一
test3-1-2中自定義幾個訊號處理函式,其中部分是截獲後列印資訊,程式繼續;部分是截獲後列印資訊,程式退出。
test3-1-1中定時向test3-1-2傳送相應的訊號,同時可以通過控制台手工向test3-1-2傳送相應的訊號。
//test3-1-1
#include #include #include #include #include #define sigprint_continue 34 //自定義訊號,大於34的訊號量都是未定義的,可使用
#define sigprint_term 35
int main()
\'","r");
char buffer[10] = ;
fgets(buffer, 10, fp);
pid=atoi(buffer);
kill(pid,sigprint_continue); //向test3-1-2傳送sigprint_continue訊號
sleep(10);
kill(pid,sigprint_term); 向test3-1-2傳送sigprint_term訊號
while(1)
sleep(1);
}
#include #include #include #include #define sigprint_continue 34
#define sigprint_term 35
/*訊號sigprint_continue的處理函式*/
void print_continue(int sig)
/*訊號sigprint_term的處理函式*/
void print_term(int sig)
/*相應鍵盤輸出產生的中斷的處理函式*/
void replykeyinput(int sig)
int main()
執行結果:
2、程式二
test3-2-1寫檔案(此時test3-2-2延時等待)後用自定義的特定訊號通知test3-2-2去讀,自己變為延時等待狀態;
test3-2-2收到此訊號後去讀檔案的內容,讀取後清空檔案,寫入新的內容,再用自定義的特定訊號通知3-2-1去讀,自己變為演示等待狀態。
//test3-2-1
#include #include #include #include #include #define sigfileready 34 //自定義訊號量34為檔案已準備訊號
#define file_path "myfile"
#define bufsize 50
#define his "test3-2-2"
char buffer[bufsize];
int pid=0;
/*訊號sigfileready的處理函式*/
void opfile(int sig)
int main()
\'","r");
char buf[10] = ;
fgets(buf, 10, fp);
pid=atoi(buf);
}sleep(1);
(void)signal(sigfileready,opfile);
kill(pid,sigfileready);
while(1)
sleep(1);
}
//test3-2-2
#include #include #include #include #include #define sigfileready 34 //自定義訊號量34為檔案已準備訊號
#define file_path "myfile"
#define bufsize 50
#define his "test3-2-1"
char buf[bufsize];
int pid=0;
/*訊號sigfileready的處理函式*/
void opfile(int sig)
int main()
\'","r");
char buf[10] = ;
fgets(buf, 10, fp);
pid=atoi(buf);
}(void)signal(sigfileready,opfile);
while(1)
sleep(1);
}
執行結果:
程序間通訊 訊號機制
最近工作中,有需要用到乙個程序向另乙個程序發訊號.於是,寫了一簡單的例子 一.訊號接受方 include include static void sigaction handle int signum,siginfo t info,void p int main return 0 二.訊號傳送方 i...
程序間通訊之訊號機制 Linux
一 訊號 1 訊號的基本概念 每個訊號都對應乙個正整數常量 稱為 signal number,即訊號編號。定義在系統標頭檔案中 代表同一使用者的諸程序之間傳送事先約定的資訊的型別,用於通知某程序發生了某異常事件。每個程序在執行時,都要通過訊號機制來檢查是否有訊號到達。若有,便中斷正在執行的程式,轉向...
Linux 訊號機制 (二)
推薦一篇好文章 文章二 程序即將從核心態返回使用者態的時候,才會處理訊號 執行訊號處理函式 使用者程序什麼時候從核心態返回使用者態呢?系統呼叫 使用者主動進入核心 中斷 使用者程序被動進入核心 被排程執行 使用者從等待執行,變為正在執行 訊號處理函式時使用者態函式,但是需要在核心態的條件下執行。所以...