在Linux中,Ctrl+C是一个信号(SIGINT)用于中断当前正在运行的进程
signal()
或sigaction()
函数来捕获SIGINT信号。这样,当用户按下Ctrl+C时,程序可以执行特定的操作,而不是直接终止。例如,使用signal()
函数捕获SIGINT信号:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void signal_handler(int sig);
int main() {
signal(SIGINT, signal_handler);
printf("Press Ctrl+C to send SIGINT signal.\n");
while (1) {
// 程序的其他操作
}
return 0;
}
void signal_handler(int sig) {
if (sig == SIGINT) {
printf("Caught SIGINT, performing cleanup...\n");
// 在这里执行清理操作,例如关闭文件、释放资源等
// 退出程序
exit(0);
}
}
sigaction()
函数捕获信号:sigaction()
函数提供了更强大的信号处理功能。它可以设置信号处理函数,并在信号处理函数中执行更多的操作。例如,使用sigaction()
函数捕获SIGINT信号:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
void signal_handler(int sig);
int main() {
struct sigaction sa;
sa.sa_handler = signal_handler;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
if (sigaction(SIGINT, &sa, NULL) == -1) {
perror("sigaction");
exit(EXIT_FAILURE);
}
printf("Press Ctrl+C to send SIGINT signal.\n");
while (1) {
// 程序的其他操作
}
return 0;
}
void signal_handler(int sig) {
if (sig == SIGINT) {
printf("Caught SIGINT, performing cleanup...\n");
// 在这里执行清理操作,例如关闭文件、释放资源等
// 退出程序
exit(0);
}
}
在这两个示例中,当用户按下Ctrl+C时,程序会捕获SIGINT信号,执行signal_handler()
函数中的清理操作,然后退出。这样,您可以为不同的信号编写不同的处理函数,以便在接收到多个信号时执行相应的操作。