Signal

高等 C 語言

簡介

字串

指標與陣列

函數

結構

物件導向

記憶體

檔案

錯誤處理

巨集處理

C 與組合語言

資料結構

動態字串

動態陣列

鏈結串列

雜湊表

開發環境

Make

Cygwin

MinGW

DevC++

wxDevC++

編譯器

gcc 編譯器

TinyCC 編譯器

LCC 編譯器

應用主題

CGI 程式

GNU 程式

視窗程式

影像處理

練習題

訊息

相關網站

參考文獻

最新修改

簡體版

English

程式範例

#include <signal.h>
#include <stdio.h>
#include <windows.h>
 
void sigdump(int sig) {
    printf("catch a signal:%d\n", sig);
}
 
int main(int argc, void *argv[]) {
    signal(SIGABRT, &sigdump);    // Process abort signal.
    signal(SIGFPE, &sigdump);    // Erroneous arithmetic operation.
    signal(SIGILL, &sigdump);    // Illegal instruction.
    signal(SIGINT, &sigdump);    // Terminal interrupt signal. Ctrl-C
    signal(SIGSEGV, &sigdump);    // Invalid memory reference.
    signal(SIGTERM, &sigdump);    // Termination signal.
    int a=7, b=0, result;
    if (strcmp(argv[1], "FPE")==0)
      result = a/b;
    else if (strcmp(argv[1], "SEGV")==0) {
      * (int*) (10000) = 1;
    }
    Sleep(1000*10);
    return 0;
}

執行結果

D:\cp>gcc signal.c -o signal

D:\cp>signal FPE
catch a signal:8

D:\cp>signal SEGV
catch a signal:11

D:\cp>signal
catch a signal:11

D:\cp>signal X     // 執行後請在 10 秒鐘內按下 Ctrl-C,就會出現 catch a signal:2 的訊息
catch a signal:2

來自 jserv 的建議

=> 這個案例不好,第一個因為 <windows.h>,另外沒有闡述 UNIX signal 和 Windows 對於 POSIX 的支援狀況

參考文獻

  1. C语言编程技巧-signal(信号), 2008-12-08 来源:网络 — http://www.uml.org.cn/c++/200812083.asp

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License