C庫函數(shù) int raise(int sig) ,導致信號sig產(chǎn)生。sig 參數(shù)是與sig 宏兼容。
以下是signal()函數(shù)的聲明。
int raise(int sig)
sig -- 這是信號發(fā)送。以下是幾個重要的標準信號常數(shù):
| macro | 信號 |
|---|---|
| SIGABRT | (信號中止)異常終止,如發(fā)起abort函數(shù)。 |
| SIGFPE | (信號浮點異常)的算術運算錯誤,如除以零或操作導致溢出(不一定是用浮點運算)。 |
| SIGILL | (信號非法指令)無效的函數(shù)圖像,如非法指令。這一般是由于在代碼中的腐敗或試圖執(zhí)行數(shù)據(jù)。 |
| SIGINT | (信號中斷)交互式注意信號。一般所產(chǎn)生的應用程序的用戶。 |
| SIGSEGV | (信號分割沖突)無效的存儲訪問:當程序嘗試讀取或?qū)懭雰?nèi)存外它是為其分配的。 |
| SIGTERM | (信號終止)終止請求發(fā)送程序。 |
這個函數(shù)如果成功返回零,否則返回非零值。
下面的例子顯示了signal()函數(shù)的用法。
#include <signal.h> #include <stdio.h> void signal_catchfunc(int); int main() { int ret; ret = signal(SIGINT, signal_catchfunc); if( ret == SIG_ERR) { printf("Error: unable to set signal handler. "); exit(0); } printf("Going to raise a signal "); ret = raise(SIGINT); if( ret !=0 ) { printf("Error: unable to raise SIGINT signal. "); exit(0); } printf("Exiting... "); return(0); } void signal_catchfunc(int signal) { printf("!! signal caught !! "); }
讓我們編譯和運行上面的程序,這將產(chǎn)生以下結果:
Going to raise a signal !! signal caught !! Exiting...