硬件产生的信号

TLPI 22.4:处理由硬件产生的信号 代码(为网站上获取) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 #define _GNU_SOURCE /* Get strsignal() declaration from <string....

September 7, 2024 · 2 min · 380 words · Jagger

信号处理函数中调用不可重入的函数

TLPI 21.1.2: 可重入函数和异步信号安全函数 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #define _XOPEN_SOURCE 600 #include <unistd.h> #include <signal.h> #include <string.h> #include <crypt.h> #include "tlpi_hdr.h" static char *str2; static int handled = 0; // 设置处理器函数,一旦遇上SIGINT,便对str2进行加密 static void handler(int sig) { crypt(str2, "xx"); handled++; } int main(int argc, char *argv[]) { char *cr1; int callNum, mismatch; struct sigaction sa; if (argc !...

August 1, 2024 · 1 min · 202 words · Jagger

在备选栈中处理信号

TLPI 21.3:在备选栈中处理信号:sigaltstack() 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 static void sigsegvHandler(int sig) { int x; // 捕捉信号,并通过局部变量的位置来大致判断为当前函数所分配的空间处于什么位置 printf("Caught signal %d (%s)\n", sig, strsignal(sig)); printf("Top of handler stack near %10p\n", (void *)&x); // fflush(NULL)的作用是在程序异常终止前确保所有标准输出缓冲区的数据都被写入到相应的输出设备。 fflush(NULL); _exit(EXIT_FAILURE); } static void overflowStack(int callNum) { char a[100000]; // 此类分配数组方式为栈上分配 printf("Call %4d - top of stack near %10p\n", callNum, &a[0]); overflowStack(callNum + 1); // 无限递归调用,不断在栈上分配空间,每次分配100000字节以上 } int main(int argc, char *argv[]) { stack_t sigstack; struct sigaction sa; int j; printf("Top of standard stack is near %10p\n", (void *)&j); // 分配备用栈并通知内核 // 在堆当中分配备用栈 sigstack....

July 31, 2024 · 2 min · 287 words · Jagger

在信号处理器函数中执行非本地跳转

TLPI 21.2.1:在信号处理器函数中执行非本地跳转 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 #define _GNU_SOURCE // 添加该定义以正常使用strsignal()、sigaction() #include <string....

July 27, 2024 · 2 min · 246 words · Jagger