📄 signal.h
字号:
@函数名称: signal
函数原型: void (*signal(int sig,void(*sigfun)(int)))(int);
函数功能: 函数建立一个信号处理器.在信号sig出现时,函数sigfun将被调用,并使用sig作为其实参.最后signal返回原来的信号处理器(出错时回SIG_ERR).有两个特殊的信号处理函数SIG_IGN(忽略信号)和SIG_DFL(执 行默认动作)
函数返回:
参数说明: C++支持许多信号处理函数,如一表
信号 条件
SIGABRT 异常终止
SIGFPE 被除数为0或者溢出
SIGILL 非法指令
SIGINT 中断
SIGSEGV 非法内存引用
SIGTERM 终止信号
所属文件: <signal.h>
#pragma inline
#include <stdio.h>
#include <signal.h>
void Catcher(int sig, int type, int *reglist)
{
printf("Caught it!");
*(reglist + 8) = 3;
}
int main()
{
signal(SIGFPE, Catcher);
asm mov ax,07FFFH
asm inc ax
asm into
asm dec ax
asm into
return 0;
}
@函数名称: raise
函数原型: int raise(int sig);
函数功能: 函数生成信号sig.如果成功,函数返回0;否则返回一个非零值.
函数返回:
参数说明: C++支持许多信号处理函数,如一表
信号 条件
SIGABRT 异常终止
SIGFPE 被除数为0或者溢出
SIGILL 非法指令
SIGINT 中断
SIGSEGV 非法内存引用
SIGTERM 终止信号
要了解详细信号列表,请参考编译器的参考手册
所属文件: <signal.h>
/*
* This program waits until a SIGINT signal
* is received.
*/
#include <stdio.h>
#include <signal.h>
sig_atomic_t signal_count;
sig_atomic_t signal_number;
static void alarm_handler(int signum)
{
++signal_count;
signal_number=signum;
}
int main()
{
unsigned long i;
signal_count=0;
signal_number=0;
signal(SIGINT,alarm_handler);
printf("Signal will be auto-raised on iteration 10000 or hit CTRL+C.\n");
printf("Iteration:\t");
for(i=0;i<100000;++i)
{
printf("\b\b\b\b\b%*d",5,i);
if(i==10000)raise(SIGINT);
if(signal_count>0)break;
}
if(i==100000){
printf("\nNo signal was raised.\n");
} else if(i==10000){
printf("\nSignal %d was raised by the raise() function.\n", signal_number);
} else {
printf("\nUser raised the signal.\n",signal_number);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -