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


C語言 signal()用法及代碼示例



描述

C庫函數void (*signal(int sig, void (*func)(int)))(int)設置處理信號的函數,即具有信號編號的信號處理程序sig

聲明

以下是 signal() 函數的聲明。

void (*signal(int sig, void (*func)(int)))(int)

參數

  • sig− 這是設置處理函數的信號編號。以下是一些重要的標準信號編號 -

不。 宏和信號
1

SIGABRT

(Signal Abort) 異常終止,例如由函數發起。

2

SIGFPE

(信號浮點異常)錯誤的算術運算,例如零除或導致溢出的運算(不一定是浮點運算)。

3

SIGILL

(信號非法指令)無效的函數圖像,例如非法指令。這通常是由於代碼損壞或嘗試執行數據所致。

4

SIGINT

(信號中斷)交互式注意信號。通常由應用程序用戶生成。

5

SIGSEGV

(Signal Segmentation Violation) Invalid access to storage - 當程序試圖在內存之外讀取或寫入時,它會被分配給它。

6

SIGTERM

(信號終止)終止請求已發送至程序。

  • func- 這是一個指向函數的指針。這可以是程序員定義的函數或以下預定義函數之一 -

不。 函數說明
1

SIG_DFL

默認處理 - 信號由該特定信號的默認操作處理。

2

SIG_IGN

忽略信號 - 信號被忽略。

返回值

此函數返回信號處理程序的前一個值,或在出錯時返回 SIG_ERR。

示例

下麵的例子展示了 signal() 函數的用法。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>

void sighandler(int);

int main () {
   signal(SIGINT, sighandler);

   while(1) {
      printf("Going to sleep for a second...\n");
      sleep(1); 
   }
   return(0);
}

void sighandler(int signum) {
   printf("Caught signal %d, coming out...\n", signum);
   exit(1);
}

讓我們編譯並運行上麵的程序,將產生以下結果,程序將進入無限循環。為了退出程序,我們使用了 CTRL + C 鍵。

Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Caught signal 2, coming out...

相關用法


注:本文由純淨天空篩選整理自 C library function - signal()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。