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

鍾超發表於2012-02-05

英文原文:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.9.html

原文作者:Eric Huss

中文譯者:柳驚鴻 Poechant

版權宣告:本文的原文版權歸Eric Huss所有,中文譯文版權歸Poechant所有。轉載請註明來自"柳大的CSDN部落格"http://blog.csdn.net/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(int sig, void (*func)(int)))(int);


該函式管理一個訊號應該如何被操控。sig代表與SIG巨集相容的訊號編號。func函式會在訊號產生時被呼叫。如果函式是SIG_DFL,則呼叫預設的handler。如果funcSIG_IGN,則訊號被忽略。如果func指向一個函式,那麼當檢測到一個訊號並執行預設handler時,該函式會被呼叫。函式必須攜帶一個int引數代表訊號編號。函式可能被returnabortexit,或者longjmp終止。當函式終止時,程式繼續從中斷處執行(除非是結果未定義的訊號SIGFPE)。


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


9.3. raise

宣告:

int raise(intsig);


產生sig訊號。sig引數要與SIG巨集相容。


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


例項:


#include<signal.h>

#include<stdio.h>


void catch_function(int);


int main(void)

{

if(signal(SIGINT, catch_function)==SIG_ERR)

{

printf("An error occured while setting a signal handler.\n");

exit(0);

}


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

if(raise(SIGINT)!=0)

{

printf("Error raising the signal.\n");

exit(0);

}

printf("Exiting.\n");

return 0;

}


void catch_function(int signal)

{

printf("Interactive attention signal caught.\n");

}


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


Raising the interactive attention signal.

Interactive attention signal caught.

Exiting.


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

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

C標準庫參考指南系列譯文(2)ctype.h

C標準庫參考指南系列譯文(3)errno.h

C標準庫參考指南系列譯文(4)float.h

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

C標準庫參考指南系列譯文(6)locale.h

C標準庫參考指南系列譯文(7)math.h

C標準庫參考指南系列譯文(8)setjmp.h

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

C標準庫參考指南系列譯文(10)stdarg.h

C標準庫參考指南系列譯文(11)stddef.h

C標準庫參考指南系列譯文(12)stdio.h(A)


版權宣告:本文的原文版權歸Eric Huss所有,中文譯文版權歸Poechant所有。轉載請註明來自"柳大的CSDN部落格"http://blog.csdn.net/poechant

-

相關文章