C语言编程,linux内的信号示例
时间: 2024-09-24 13:25:06 浏览: 7
在C语言编程中,Linux内核提供了一种机制来处理异步事件,即信号(signal)。信号是一种特殊的中断,用于通知进程某个事件已发生,如用户按下Ctrl+C键、定时器到期或者是I/O请求完成等。
下面是一个简单的信号示例,我们来创建一个程序,它会捕获并处理SIGINT(通常由Ctrl+C引发)信号:
```c
#include <stdio.h>
#include <signal.h> // 包含信号处理的相关头文件
// 声明一个函数作为信号处理器
void signal_handler(int signum) {
printf("接收到信号 %d\n", signum);
if (signum == SIGINT) {
printf("退出前打印一条消息...\n");
sleep(2); // 程序休眠2秒,模拟一些清理操作
exit(EXIT_SUCCESS); // 清理并优雅地退出
}
}
int main() {
// 注册信号处理器
signal(SIGINT, signal_handler);
printf("请输入任意字符,然后按Ctrl+C中断程序...\n");
while (getchar() != EOF) {} // 永远等待用户输入,直到遇到EOF(例如Ctrl+C)
return 0;
}
```
在这个例子中,`signal`函数将`signal_handler`函数绑定到SIGINT信号上。当程序运行时,如果接收到SIGINT信号,就会调用这个处理器。`signal_handler`打印出信号编号,并在收到两次连续的SIGINT(即一次发送和一次确认)后退出程序。