C 标准库
来源:互联网 发布:python获取不了源代码 编辑:程序博客网 时间:2024/06/05 09:02
简介
signal.h 头文件定义了一个变量类型 sig_atomic_t、两个函数调用和一些宏来处理程序执行期间报告的不同信号。
库变量
下面是头文件 signal.h 中定义的变量类型:
这是 int 类型,在信号处理程序中作为变量使用。它是一个对象的整数类型,该对象可以作为一个原子实体访问,即使存在异步信号时,该对象可以作为一个原子实体访问。
库宏
下面是头文件 signal.h 中定义的宏,这些宏将在下列两个函数中使用。SIG_ 宏与 signal 函数一起使用来定义信号的功能。
默认的信号处理程序。 2 SIG_ERR
表示一个信号错误。 3 SIG_IGN
忽视信号。
SIG 宏用于表示以下各种条件的信号码:
程序异常终止。 2 SIGFPE
算术运算出错,如除数为 0 或溢出。 3 SIGILL
非法函数映象,如非法指令。 4 SIGINT
中断信号,如 ctrl-C。 5 SIGSEGV
非法访问存储器,如访问不存在的内存单元。 6 SIGTERM
发送给本程序的终止请求信号。
库函数
下面是头文件 signal.h 中定义的函数:
该函数设置一个函数来处理信号,即信号处理程序。 2 int raise(int sig)
该函数会促使生成信号 sig。sig 参数与 SIG 宏兼容。
C 库函数 - signal()
描述
C 库函数 void (*signal(int sig, void (*func)(int)))(int) 设置一个函数来处理信号,即带有 sig 参数的信号处理程序。
声明
下面是 signal() 函数的声明。
void (*signal(int sig, void (*func)(int)))(int)
参数
- sig – 在信号处理程序中作为变量使用的信号码。下面是一些重要的标准信号常量:
返回值
该函数返回信号处理程序之前的值,当发生错误时返回 SIG_ERR。
实例
下面的实例演示了 signal() 函数的用法。
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <signal.h>void sighandler(int);int main(){ signal(SIGINT, sighandler); while(1) { printf("开始休眠一秒钟...\n"); sleep(1); } return(0);}void sighandler(int signum){ printf("捕获信号 %d,跳出...\n", signum); exit(1);}
让我们编译并运行上面的程序,这将产生以下结果,且程序会进入无限循环,需使用 CTRL + C 键跳出程序。
开始休眠一秒钟...开始休眠一秒钟...开始休眠一秒钟...开始休眠一秒钟...开始休眠一秒钟...捕获信号 2,跳出...
C 库函数 - raise()
描述
C 库函数 int raise(int sig) 会促使生成信号 sig。sig 参数与 SIG 宏兼容。
声明
下面是 raise() 函数的声明。
int raise(int sig)
参数
- sig – 要发送的信号码。下面是一些重要的标准信号常量:
返回值
如果成功该函数返回零,否则返回非零。
实例
下面的实例演示了 raise() 函数的用法。
#include <signal.h>#include <stdio.h>void signal_catchfunc(int);int main(){ int ret; ret = signal(SIGINT, signal_catchfunc); if( ret == SIG_ERR) { printf("错误:不能设置信号处理程序。\n"); exit(0); } printf("开始生成一个信号\n"); ret = raise(SIGINT); if( ret !=0 ) { printf("错误:不能生成 SIGINT 信号。\n"); exit(0); } printf("退出...\n"); return(0);}void signal_catchfunc(int signal){ printf("!! 信号捕获 !!\n");}
让我们编译并运行上面的程序,这将产生以下结果:
开始生成一个信号!! 信号捕获 !!退出...
阅读全文
0 0
- C标准库“圣经”:C标准库
- 标准c++ 库
- C标准库[转]
- C标准库
- (不错)C标准库
- C标准库
- C语言标准库
- C标准库“圣经”
- 解读《C标准库》
- C标准库
- c 标准库
- c标准库
- c标准库
- C标准库断言
- C标准库
- C 标准库
- C标准库
- C标准库
- 用python做高数线代题
- 专注ARM嵌入式开发,S5P4418核心板ARM Cortex-A9架构
- 算法与数据结构——算法题 21:微信红包(2016腾讯校招笔试题) ? 待解决
- 12. 常见类(Scanner和String)
- GitHub上README.md教程
- C 标准库
- 唯快不破:高性能网络服务器--I/O复用 select poll epoll_wait之间的区别
- HDU 畅通工程(优美的数据结构——并查集)
- DNS
- Project trap
- Uncaught TypeError: download is not a function at HTMLAnchorElement.onclick (index.html:25)
- js 刷新页面
- 图像压缩——小波变换(Wavelet Transform)从连续小波变换谈到离散小波变换
- easyui 入门