在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()
函數中的清理操作,然后退出。這樣,您可以為不同的信號編寫不同的處理函數,以便在接收到多個信號時執行相應的操作。