#include <stdio.h>
#include <signal.h>
#include <unistd.h>
// 信号处理函数
void sigint_handler(int signum) {
printf("You pressed Ctrl+C!\n");
}
int main() {
// 设置SIGINT信号的处理函数
if (signal(SIGINT, sigint_handler) == SIG_ERR) {
perror("signal");
return 1;
}
printf("Press Ctrl+C to generate SIGINT signal...\n");
while (1) {
sleep(1);
}
return 0;
}
代码中涉及的信号处理函数及参数作用:
-
signal
函数:
- 函数原型:
void (*signal(int signum, void (*handler)(int)))(int);
,简化后为signal(int signum, void (*handler)(int))
。
- 参数
signum
:指定要捕获的信号类型,这里SIGINT
表示中断信号,通常由Ctrl+C
产生。
- 参数
handler
:指定信号处理函数,当捕获到指定信号时,系统将调用该函数。它是一个函数指针,指向自定义的信号处理函数,在本代码中为sigint_handler
。
-
sigint_handler
函数:
- 参数
signum
:传递给信号处理函数的参数,它表示当前捕获到的信号值。虽然在本代码中没有用到该参数,但它提供了一种机制,使得同一个信号处理函数可以处理多种不同信号。