C 语言捕获 ctrl + c 按键信号方法
测试平台是 Windows 10,使用 MinGW GCC 编译器。
// 函数原型:void (*signal(int sig, void (*func)(int)))(int);
// 解释:
// signal 是一个函数
// signal 函数接受 2 个参数
// 第 1 个参数是 int 类型 sig
// 第 2 个参数是函数指针 func
// func 指针指向的函数接受一个 int 类型参数,无返回值
// signal 函数返回值是指针
// 这个指针是函数指针,指针指向的函数接受 1 个 int 类型参数,无返回值
#include <signal.h>
#include <stdio.h>
#include <windows.h>
void handler(int);
int main() {
int count = 0;
// signal 函数原型解释见上方注释
// 注册 SIGINT 信号(按下 ctrl+c 触发)使用自定义的 handler 函数来处理
// handler 也可以换成预定义的 SIG_ 开头的函数,比如 SIG_ACK 等
signal(SIGINT, handler);
while (1) {
printf("循环第%d次\n", count++);
Sleep(1000);
}
return 0;
}
void handler(int s) {
printf("ctrl+c pressed!\n");
printf("signal is: %d\n", s);
printf("in handler sleep!\n");
Sleep(5000); // 按下 ctrl+c 后,此处 sleep 并不会阻塞程序运行
printf("in handler awake!\n");
exit(0);
}
浙公网安备 33010602011771号