C標準庫參考指南系列譯文(9)signal h

2021-06-03 14:57:08 字數 3009 閱讀 8464

英文原文:

中文譯者:柳驚鴻 poechant

9. signal.h

標頭檔案signal處理程式執行時產生的訊號的方法。

巨集:sig_dfl

sig_err

sig_ign

sigabrt

sigfpe

sigill

sigint

sigsegv

sigterm

函式:

signal();

raise();

變數:typedef sig_atomic_t

9.1.變數和定義

型別sig_atomic_t就是int,作為signal函式的handler中的變數。sig_巨集用於signal函式中用於定義訊號函式。

sig_dfl

預設handler。

sig_err

表示錯誤訊號。

sig_ign

忽略訊號。

sig巨集代表下列情況下的訊號編號。

sigabrt

異常終止(由abort函式產生)。

sigfpe

浮點錯誤(由零除執行、不合理操作產生)。

sigill

非法操作(指令)。

sigint

互動訊號(比如我們熟悉的ctrl-c)。

sigsegv

非法儲存訪問(段錯誤,記憶體錯誤)。

sigterm

終止請求。

9.2. signal

宣告:void (*signal(intsig

, void (*func

)(int)))(int);

該函式管理乙個訊號應該如何被操控。sig

代表與sig巨集相容的訊號編號。func

函式會在訊號產生時被呼叫。如果函式是sig_dfl,則呼叫預設的handler。如果func

sig_ign,則訊號被忽略。如果func

指向乙個函式,那麼當檢測到乙個訊號並執行預設handler時,該函式會被呼叫。函式必須攜帶乙個int引數代表訊號編號。函式可能被returnabortexit,或者longjmp終止。當函式終止時,程式繼續從中斷處執行(除非是結果未定義的訊號sigfpe)。

如果訊號呼叫成功,則返回指向之前特定訊號型別的handler的指標。如果訊號呼叫失敗,則返回sig_err並且將errno設定乙個合理值。

9.3. raise

宣告:int raise(intsig

);

產生sig

訊號。sig

引數要與sig巨集相容。

如果呼叫成功,會返回0。否則返回非零值。

例項:

#include

#include

void catch_function(int);

int main(void)

printf("raising the interactive attention signal.\n");

if(raise(sigint)!=0)

printf("exiting.\n");

return 0;

}

void catch_function(int signal)

程式執行輸出結果(假設沒有錯誤):

raising the interactive attention signal.

interactive attention signal caught.

exiting.

該系列譯文在持續更新中⋯⋯ -

C標準庫參考指南系列譯文(9)signal h

英文原文 中文譯者 柳驚鴻 poechant 9.signal.h 標頭檔案signal處理程式執行時產生的訊號的方法。巨集 sig dfl sig err sig ign sigabrt sigfpe sigill sigint sigsegv sigterm 函式 signal raise 變數...

C標準庫參考指南系列譯文(1)assert h

英文原文 中文譯者 柳驚鴻 poechant 1.1 assert.h 斷言標頭檔案用於除錯。巨集 assert 外部引用 ndebug 1.1.assert 宣告 void assert intexpression 斷言標頭檔案中的巨集允許你將一些特殊資訊寫入到標準錯誤檔案。如果表示式的值為0 f...

C標準庫參考指南系列譯文(5)limits h

英文原文 中文譯者 柳驚鴻 poechant 5.limits.h 該標頭檔案定義了變數型別的特點。5.1.defined values 下面這些值由 define指令定義。這些值由實現所確定,但一般不會比下面給出的值小。char bit 8 單位元組的位數。schar min 127 有符號字元的...