在C中捕获Ctrl-C可以通过使用signal()
函数和sigaction()
函数来实现。首先,需要使用signal()
函数来设置一个信号处理函数,当有信号产生时,该函数就会被调用。然后,使用sigaction()
函数来设置信号处理函数,并指定SA_RESTART
选项,这样当收到信号时,程序就会自动重启。
在信号处理函数中,需要使用sigaddset()
函数将SIGINT
信号添加到信号处理函数中,并使用sigaction()
函数来设置信号处理函数,并指定SA_RESTART
选项,这样当收到信号时,程序就会自动重启。
下面是一个示例代码,可以捕获Ctrl-C并退出程序:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void handle_sigint(int sig) {
printf("\nCaught signal %d\n", sig);
exit(0);
}
int main() {
signal(SIGINT, handle_sigint);
while (1) {
sleep(1);
}
return 0;
}
在这个示例代码中,我们使用signal()
函数将SIGINT
信号的处理函数设置为handle_sigint()
函数。当用户按下Ctrl-C时,程序就会调用handle_sigint()
函数,并退出程序。
在handle_sigint()
函数中,我们使用printf()
函数输出一条消息,告诉用户程序已经捕获到了SIGINT
信号。然后,使用exit()
函数退出程序。
注意:当程序接收到SIGINT
信号时,应该尽可能快地调用handle_sigint()
函数,否则可能会导致程序崩溃。
领取专属 10元无门槛券
手把手带您无忧上云