高階教程 用C 寫乙個訊號處理的程式

2021-08-08 03:07:10 字數 2319 閱讀 9246

訊號是由作業系統傳給程序的中斷,會提早終止乙個程式。在

unix

、linux

、mac os x

或windows

系統上,可以通過按

ctrl+c

產生中斷。

有些訊號不能被程式捕獲,但是下表所列訊號可以在程式中捕獲,並可以基於訊號採取適當的動作。這些訊號是定義在

c++

標頭檔案中。

訊號

描述

sigabrt

程式的異常終止,如呼叫abort

sigfpe

錯誤的算術運算,比如除以零或導致溢位的操作。

sigill

檢測非法指令。

sigint

接收到互動注意訊號。

sigsegv

非法訪問記憶體。

sigterm

傳送到程式的終止請求。

signal()

函式

c++

訊號處理庫提供了

signal

函式,用來捕獲突發事件。以下是

signal()

函式的語法:

void

(*signal (

int sig,

void

(*func)(

int)))(

int);

這個函式接收兩個引數:第乙個引數是乙個整數,代表了訊號的編號;第二個引數是乙個指向訊號處理函式的指標。

讓我們編寫乙個簡單的

c++

程式,使用

signal()

函式捕獲

sigint

訊號。不管您想在程式中捕獲什麼訊號,您都必須使用signal

例項

#include <

iostream

>#include <

csignal

>

usingnamespacestd

; voidsignalhandler

(intsignum

)intmain

()return0;

} 當上面的**被編譯和執行時,它會產生下列結果:

going to sleep....

going to sleep....

going to sleep....

現在,按

ctrl+c

來中斷程式,您會看到程式捕獲訊號,程式列印如下內容並退出:

going to sleep....

going to sleep....

going to sleep....

interrupt signal (

2) received.

raise()

函式

您可以使用函式

raise()

生成訊號,該函式帶有乙個整數訊號編號作為引數,語法如下:

intraise

(signal sig);

在這裡,sig

是要傳送的訊號的編號,這些訊號包括:

sigint

、sigabrt

、sigfpe

、sigill

、sigsegv

、sigterm

、sighup

。以下是我們使用

raise()

函式內部生成訊號的例項:

例項

#include <

iostream

>#include <

csignal

>

usingnamespacestd

; voidsignalhandler

(intsignum

)intmain

()sleep(1

); }return0;

} 當上面的**被編譯和執行時,它會產生下列結果,並會自動退出:

going to sleep....

going to sleep....

going to sleep....

interrupt signal (

2) received.

www.tiqianzd.com

乙個用c 寫的掃瞄asp原始碼漏洞的應用程式 2

主要方法 protected void btngo click object sender,system.eventargs e 定義分割符為 char line 定義分割符為 string arrstring strurl.split line 求asp檔案全名 string strfilenam...

乙個用c 寫的掃瞄asp原始碼漏洞的應用程式 續

主要方法 protected void btngo click object sender,system.eventargs e 定義分割符為 char line 定義分割符為 string arrstring strurl.split line 求asp檔案全名 string strfilenam...

乙個用c 寫的掃瞄asp原始碼漏洞的應用程式 續

主要方法 protected void btngo click object sender,system.eventargs e 定義分割符為 char line 定義分割符為 string arrstring strurl.split line 求asp檔案全名 string strfilenam...