Linux 訊號如何攜帶訊息之高階版

2021-10-14 11:39:33 字數 1552 閱讀 2738

攜帶訊息原理:

1、 繫結 sigaction()

2、sigqueue() 傳送訊息

1、接受、繫結訊號sigaction()原函式

#include

//繫結訊號

intsigaction

(int signum,

const

struct sigaction *act,

struct sigaction *oldact)

; 引數:

signum: 要捕捉的訊號

act : 結構體 (要配置的三個重要引數)

oldact: null(堵塞)

act結構需要配置的引數:

struct sigaction 

;引數:

1、s1a_handler:(不配置)訊號處理函式,不接受額外資料,sig_ign 為忽略,sig_dfl 為預設。

2、sa_sigaction:定義訊號處理函式,能夠接受額外資料

a、int :捕捉到相應的訊號值

b、siginfo_t * :si_value儲存了傳送過來的資訊,同時,在 si_int或者 si_ptr成員中也儲存了對應的資料

c、void

* :訊號攜帶訊息的有效值(判斷是否為nll)

3、sa_mask :不配置(預設阻塞關鍵字的訊號)

4、sa_flags :sa_siginfo 巨集接受資料

siginfo_t結構體:

獲取訊號的資訊

siginfo_t
接收端demo:

#include

#include

//void (*sa_sigaction)(int, siginfo_t *, void *);

void

handler

(int signum, siginfo_t *data ,

void

* text)

}int

main()

2、sigqueue() 傳送訊息

sigqueue()函式原型:

int

sigqueue

(pid_t pid,

int sig,

const

union si**al value)

; 發訊息

引數:pid :程序pid號

sig :捕捉的訊號

value聯合體 :發的內容

union si**al

;

傳送端demo:

#include

#include

#include

intmain

(int argc,

char

**ar**)

Linux之高階命令

centos和redhat suse系列 rpm qa kernel或rpm qa grep i kerneldebian和ubuntu系列 dpkg list grep linux image sysctl命令的配置檔案是 etc sysctl.conf,可以 1.使用sysctl工具修改核心引數...

二 Linux之高階指令

df指令 作用 檢視磁碟的空間 語法 df h h 以可讀性形式較高的形式展示大小 free指令 作用 檢視記憶體使用情況 語法 free m m單位為mb,g單位為g 四捨五入 a 已分配但未被使用 mem beffers 輸入 cached 輸出 free b buffers cache 檢視剩...

Linux記憶體管理之高階記憶體對映

分析完linux記憶體管理的基本概念與實現之後,就可以接著分析使用者空間與核心空間的互動操作了。brk系統呼叫屬於那種常用但是 可見度 不高的操作,常用於使用者空間堆的管理 請參閱本站的 中的malloc機制分析 一文 brk在使用者空間的介面為int brk void end data segme...