描述
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語言 sinh()用法及代碼示例
- C語言 sin()用法及代碼示例
- C語言 setlocale()用法及代碼示例
- C語言 scanf()用法及代碼示例
- C語言 strcspn()用法及代碼示例
- C語言 setlinestyle()用法及代碼示例
- C語言 showbits()用法及代碼示例
- C語言 sqrt()用法及代碼示例
- C語言 system()用法及代碼示例
- C語言 strtol()用法及代碼示例
- C語言 sprintf()用法及代碼示例
- C語言 sscanf()用法及代碼示例
- C語言 snprintf()用法及代碼示例
- C語言 strrchr()用法及代碼示例
- C語言 strftime()用法及代碼示例
- C語言 strtok()用法及代碼示例
- C語言 strncat()用法及代碼示例
- C語言 宏 setjmp()用法及代碼示例
- C語言 scanf()和gets()的區別用法及代碼示例
- C語言 strupr()用法及代碼示例
注:本文由純淨天空篩選整理自 C library function - signal()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。