linux 訊號處理函式的初始化

2021-09-28 20:16:30 字數 1059 閱讀 8318

很多時候,程序之間會使用訊號,來進行程序間通訊。

但是一般訊號處理函式的預設動作,就是退出程序。

如果程序,在初始化訊號處理函式的過程中就接收到了訊號,就會退出。

因此正確的初始化訊號處理函式,就顯得很重要。

一般將初始化訊號處理函式real_time_signal_setup()作為main()的第乙個呼叫函式。就可以減少很多的問題。

static

void

signal_handler

(int sig)

static

void

real_time_signal_setup

(void)}

intmain

(int argc,

char

**ar**)

但是,初始化訊號處理函式real_time_signal_setup()總是會消耗一定的時間。

如果初始化還沒有完成,此時一旦接收到訊號,就會出現問題。

更好的辦法。就是讓real_time_signal_setup()函式,跑在main()函式的前面。

這裡就利用了 gcc 的乙個attribute((constructor)) 屬性。

static

void

signal_handler

(int sig)

__attribute__((

constructor

(101))

)/* <-- make `real_time_signal_setup()` run before `main()` */

static

void

real_time_signal_setup

(void)}

intmain

(int argc,

char

**ar**)

建構函式初始化列表和初始化函式

其實並沒有所謂的初始化函式的概念,本文中的初始化函式只是說明在函式體內進行賦值。而初始化列表才是真正意義上的物件初始化。使用初始化列表效率會高一點。c 規定,物件的成員變數的初始化動作發生在進入建構函式本體之前。在建構函式體內只是賦值,並不是初始化。請看下面這個栗子 class base publi...

GLUT初始化函式

void glutinit int argc,char argv 初始化glut庫。對應main函式的形式應是 int main int argc,char argv 這個函式從main函式獲取其兩個引數。void glutinitwindowsize int width,int height 設定...

memset函式初始化

對於絕大多數編譯器來講,char namekey 15 與memset namekey,0x0,sizeof namekey 或memset namekey,0 sizeof namekey 這三個是一樣的。但是有的編譯器,char namekey 15 只將namekey 0 給賦值為 0 其他成...