在 C 中捕获 Ctrl-C 事件
在 C 中,捕获 Ctrl-C (SIGINT) 事件对于处理程序正常终止至关重要。信号库为此提供了一种简单的机制,但其可靠性因不同的实现而异。
为了确保行为一致,建议使用 sigaction 函数。下面是使用 sigaction 的 Tom 代码的修订版本:
#include <signal.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> void my_handler(int s) { printf("Caught signal %d\n", s); exit(1); } int main(int argc, char** argv) { struct sigaction sigIntHandler; sigIntHandler.sa_handler = my_handler; sigemptyset(&sigIntHandler.sa_mask); sigIntHandler.sa_flags = 0; sigaction(SIGINT, &sigIntHandler, NULL); pause(); return 0; }
此代码定义了一个信号处理程序 my_handler,它在收到 SIGINT 信号 (Ctrl-C) 时打印一条消息并退出程序。 sigaction 函数注册 SIGINT 信号的处理程序,并设置正确行为所需的标志。
现在,当程序运行并按下 Ctrl-C 时,它将捕获信号并调用处理程序,这依次打印适当的消息并优雅地终止程序。
以上是如何在 C 中优雅地处理 Ctrl-C 事件?的详细内容。更多信息请关注PHP中文网其他相关文章!