- C 标准库
- C 库 - 首页
- C 库 - <assert.h>
- C 库 - <complex.h>
- C 库 - <ctype.h>
- C 库 - <errno.h>
- C 库 - <fenv.h>
- C 库 - <float.h>
- C 库 - <inttypes.h>
- C 库 - <iso646.h>
- C 库 - <limits.h>
- C 库 - <locale.h>
- C 库 - <math.h>
- C 库 - <setjmp.h>
- C 库 - <signal.h>
- C 库 - <stdalign.h>
- C 库 - <stdarg.h>
- C 库 - <stdbool.h>
- C 库 - <stddef.h>
- C 库 - <stdio.h>
- C 库 - <stdlib.h>
- C 库 - <string.h>
- C 库 - <tgmath.h>
- C 库 - <time.h>
- C 库 - <wctype.h>
- C 标准库资源
- C 库 - 快速指南
- C 库 - 有用资源
- C 库 - 讨论
C 库 - raise() 函数
C 库的 raise(sig) 函数会导致生成信号 sig。sig 参数与 SIG 宏兼容。
两种类型的信号处理:
- 测试信号处理:在这种信号处理中,我们使用 raise() 来检查信号处理程序是否对特定信号正确响应。
- 自定义信号处理:如果用户希望使用 signal() 函数设置自定义信号处理,那么我们可以使用 raise() 函数显式调用处理程序。
语法
以下是 C 库 raise() 函数的语法:
int raise(int sig)
参数
此函数仅接受一个信号参数:
sig - 这是要发送的信号编号。以下是一些重要的标准信号常量:
| 序号 | 宏 & 信号 |
|---|---|
| 1 |
SIGABRT (信号中止) 由 abort 函数发起的异常终止。 |
| 2 |
SIGFPE (信号浮点异常) 错误的算术运算,例如零除或导致溢出的运算(不一定与浮点运算相关)。 |
| 3 |
SIGILL (信号非法指令) 无效的函数映像,例如非法指令。这通常是由于代码损坏或尝试执行数据造成的。 |
| 4 |
SIGINT (信号中断) 交互式注意信号。通常由应用程序用户生成。 |
| 5 |
SIGSEGV (信号段错误) 无效的存储器访问 - 当程序尝试读取或写入超出分配给它的内存时。 |
| 6 |
SIGTERM (信号终止) 发送到程序的终止请求。 |
返回值
如果函数成功,则返回零;否则返回非零值。
示例 1
在此示例中,我们使用 C 库 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("Error: unable to set signal handler.\n");
exit(0);
}
printf("Going to raise a signal\n");
ret = raise(SIGINT);
if( ret !=0 ) {
printf("Error: unable to raise SIGINT signal.\n");
exit(0);
}
printf("Exiting...\n");
return(0);
}
void signal_catchfunc(int signal) {
printf("!! signal caught !!\n");
}
输出
以上代码产生以下结果:
Going to raise a signal !! signal caught !! Exiting...
示例 2
在此示例中,我们使用 signal() 和 raise() 函数说明了信号接收方和发送方。
#include <signal.h>
#include <stdio.h>
void handler(int sig) {
// Signal receiver
printf("Signal received : %d\n", sig);
}
int main() {
signal(SIGILL, handler);
// Signal sender
printf("Signal Sended : %d\n", SIGILL);
raise(SIGILL);
return 0;
}
输出
执行以上代码后,我们将获得以下结果:
Signal Sended : 4 Signal received : 4
广告