當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


C語言 signal用法及代碼示例

C語言signal頭文件(signal.h)中signal函數的用法及代碼示例。

用法:

void (*signal(int sig, void (*func)(int)))(int);
設置函數以處理信號
指定一種處理信號的方法信號號由指定sig

參數func指定程序可以處理信號的三種方式之一:
  • 默認處理(SIG_DFL):該信號由該特定信號的默認操作處理。
  • 忽略信號(SIG_IGN):該信號將被忽略,即使沒有意義,代碼也將繼續執行。
  • 函數處理程序:定義了一個特定的函數來處理信號。

任何一個SIG_DFL或者SIG_IGN在程序啟動時,對於每個受支持的信號,將其設置為默認的信號處理行為。

參數

sig
這個信號值設置了處理函數的對象。以下宏常量表達式標識標準信號值:

信號
SIGABRT(信號中止)異常終止,例如由abort函數。
SIGFPE(信號浮點異常)錯誤的算術運算,例如零除或導致溢出的運算(不一定是浮點運算)。
SIGILL(信號非法指令)無效的函數圖像,例如非法指令。這通常是由於代碼損壞或嘗試執行數據所致。
SIGINT(信號中斷)交互式注意信號。通常由應用程序用戶生成。
SIGSEGV(違反信號分段)對存儲的無效訪問:當程序嘗試在已分配的內存之外進行讀取或寫入時。
SIGTERM(信號終止)終止請求已發送至程序。

每個庫的實現可能會提供額外的信號值可以與此函數一起使用的宏常量。

請注意,並非所有運行環境都需要生成自動信號,即使在上述特定情況下也是如此,盡管所有運行環境都必須將通過顯式調用生成的信號傳遞給raise函數。
func
指向函數的指針。這可以是程序員定義的函數,也可以是以下預定義函數之一:

SIG_DFL默認處理:該信號由該特定信號的默認操作處理。
SIG_IGN忽略信號:信號被忽略。

如果是函數,則應遵循以下原型(帶有C鏈接):
 
void handler_function (int parameter);


返回值

返回類型與參數類型相同func

如果請求成功,則該函數返回指向特定處理程序函數的指針,該函數負責在調用之前處理該信號(如果有)。或是SIG_DFL或者SIG_IGN如果在調用之前,信號分別由默認處理程序處理或被忽略。

如果該函數未成功注冊新的信號處理過程,則返回SIG_ERRerrno可以設置為正值。

示例

/* signal example */
#include <stdio.h>      /* printf */
#include <signal.h>     /* signal, raise, sig_atomic_t */

sig_atomic_t signaled = 0;

void my_handler (int param)
{
  signaled = 1;
}

int main ()
{
  void (*prev_handler)(int);

  prev_handler = signal (SIGINT, my_handler);

  /* ... */
  raise(SIGINT);
  /* ... */
  
  printf ("signaled is %d.\n",signaled);
  

  return 0;
}
signaled is 1.





注:本文由純淨天空篩選整理自C標準庫大神的英文原創作品 C signal function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。