您现在的位置是:首页 > 技术文章网站首页技术文章
[C++]信号处理
了解C++信号捕获和生成;
1.信号捕获
信号是由操作系统传给进程的中断,会提前终止一个程序.可以通过Ctrl+C产生中断;
信号 | 描述 |
---|---|
SIGABRT | 程序的异常终止,如调用 abort。 |
SIGFPE | 错误的算术运算,比如除以零或导致溢出的操作。 |
SIGILL | 检测非法指令。 |
SIGINT | 程序终止(interrupt)信号。 |
SIGSEGV | 非法访问内存。 |
SIGTERM | 发送到程序的终止请求。 |
C++信号处理库提供了signal函数,用来捕获突发时间.以下是 signal() 函数语法:
void (*signal(int sig,void(*func)(int)))(int); 容易理解格式: signal(registered signal,signal handler); 参数: registered signal:一个整数,代表信号编号; signal handler:一个指向信号处理函数的指针;
实例:
#include <iostream> #include <csignal> #include <unistd.h> using namespace std; void signalHandler(int signum) { cout << "Interrupt signal (" << signum << ") received.\n "; //清理并关闭 //终止程序 exit(signum); } int main() { //注册信号 SIGINT 和 信号处理程序 signal(SIGINT,signalHandler); while(1){ cout << "Going to sleep..." << endl; sleep(1); } return 0; }
Ctrl+C 终止获取 运行结果:
2.生成信号
可以使用函数 raise() 生成信号,该函数带有一个整数信号编号作为参数,语法如下:
int raise(signal sig); 参数: sig:要发送的信号的编号,这些信号包括:SIGINT,SIGABRT,SIGFPE,SIGILL,SIGSEGV,SIGTERM,SIGHUP;
实例:
#include <iostream> #include <csignal> #include <unistd.h> using namespace std; void signalHandler(int signum) { cout << "Interrupt signal ("<< signum <<") received.\n"; //清理并关闭 //终止程序 exit(signum); } int main() { int i = 0; //注册信号 SIGINT 和 信号处理程序 signal(SIGINT,signalHandler); while(++i){ cout << "Going to sleep..." << endl; if(i == 3){ raise(SIGINT); } sleep(1); } return 0; }
运行结果:
注:Linux 用 #include <unistd.h> 和 sleep(),Windos 用 #include <windows.h> 和 Sleep()。
上一篇:[ThinkPHP] 标签云制作
下一篇:Nmap常用命令(进阶命令)
相关文章
文章评论 (0)