您的位置:首页 > 游戏 > 手游 > 今日福建新闻最新消息_用dw做网页的步骤_高端网站建设公司哪家好_培训网站源码

今日福建新闻最新消息_用dw做网页的步骤_高端网站建设公司哪家好_培训网站源码

2025/7/7 17:08:43 来源:https://blog.csdn.net/m0_72128260/article/details/142368092  浏览:    关键词:今日福建新闻最新消息_用dw做网页的步骤_高端网站建设公司哪家好_培训网站源码
今日福建新闻最新消息_用dw做网页的步骤_高端网站建设公司哪家好_培训网站源码

       signal.h 提供了信号(即异常情况)的处理工具。所谓“信号”可以理解为系统与程序之间的沟通消息,用来处理运行时的错误及异常事件。
一、signal.h 定义的表示运行错误或异常的宏:
       SIGABRT:异常中止(调用了abort函数)
       SIGFPE:算术运算发生了错误(0做除数或者溢出)
       SIGILL:无效指令
       SIGINT:中断(由按下Ctrl-C发出)
       SIGSEGV:无效内存访问
       SIGTERM:终止请求
二、函数 signal()
       功能:用来指定某种信号的处理函数,这个函数也是在头文件signal.h中定义的。
       使用格式:signal(参1,参2);
         参1:代表信号的宏
         参2:处理这个信号的函数指针(返回值为void带有int参数的函数)
       返回值:返回值上一个处理函数的指针。
       说明:
        a. 信号处理函数内部可以根据传入的int参数,判断接收到了什么信号并进行处理。一般处理函数执行完成,程序会从信号发生点恢复执行。
        b. 处理函数的返回值一般把它保存在变量之中,当新的处理函数执行完,再恢复以前的处理函数。
三、与信号处理函数相关的宏
       SIG_DFL 表示默认的处理函数 例如:signal(SIGINT, SIG_DEL); //表示用系统默认信号处理函数处理中断信号
       SIG_IGN 表示忽略该信号 例如:signal(SIGINT, SIG_IGN); //表示忽略中断信号(不处理)
       SIG_ERR 是信号处理函数自身发生错误时的返回值,使用它可以判断信号处理函数是否正常
四、函数raise()
       功能:用来在程序中发出信号,这个函数也是在signal.h中定义的。
       使用格式:raise(参1);
         参1:int型数(这个int型数值就是信号值,也就是前面系统定义的宏)
       返回值:信号发出成功返回0;失败返回非0数。
五、总结
        a. signal函数的作用是将信号与处理程序关联,raise的作用是发出信号,这两个函数
要成对使用;
        b. 信号发到我们自己编写的信号处理程序,包括SIGINT运行完后都会返回到主程序;但
使用缺省信号处理程序,处理完上述信号后,不再回到主程序,直接结束。
        c. 如果使用Ctr-C发出SIGINT信号,编译器会首先收到。
        以上函数等的实验程序如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<signal.h>
#include<Windows.h>
//自定义信号处理程序
void handle(int x) 
{printf("进入信号处理函数\n");printf("接收到信号的值是:%i\n", x);printf("按回车键继续...\n");getchar();
}
int main(void)
{
//实验SIGINT信号void* oldP=signal(SIGINT, handle);//signal函数关联信号SIGINT和信号处理程序handle//并接收signal函数的返回值if(raise(SIGINT)== SIG_ERR)printf("raise函数运行错误...\n");//调用raise函数发出SIGINT信号并判断是否发送成功signal(SIGINT, oldP);//恢复signal原始处理函数printf("已经回到主程序(1)...\n");
//实验SIGFPE信号signal(SIGFPE, handle);//关联信号SIGFPE与信号处理程序handleprintf("请输入一个除数:\n");int a;	scanf("%i", &a);if (a == 0) //输入的数如果是0,则进入信号处理函数{raise(SIGFPE,handle);//发出SIGFPE信号}printf("已经回到主程序(2)...\n");getchar();
//实验SIGABRT信号signal(SIGABRT, handle);//关联信号SIGABRT与信号处理程序handleraise(SIGABRT);//发出SIGABRT信号printf("已经回到主程序(3)...\n");getchar();
//实验缺省处理程序signal(SIGTERM,SIG_DFL);//关联信号SIGTERM与缺省信号处理程序raise(SIGTERM);//发出SIGTERM信号//缺省处理程序运行结束,程序即结束,不会再回到主程序printf("已经回到主程序(4)...\n");//这一语句及后边语句不会执行getchar();return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com