Intercepting Ctrl-C Events in C
捕捉 Ctrl-C 事件是编程中的一项必要任务,尤其是在您希望对意外中断做出优雅响应的情况下。
使用 Sigaction
在 C 中,使用 sigaction 函数来处理信号更可靠。其语法如下:
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
其中:
在 Thomas 给出的示例中,sigaction 结构如下:
struct sigaction sigIntHandler; sigIntHandler.sa_handler = my_handler; sigemptyset(&sigIntHandler.sa_mask); sigIntHandler.sa_flags = 0;
其中:
将此 sigaction 结构与 SIGINT 信号一起使用:
sigaction(SIGINT, &sigIntHandler, NULL);
处理程序函数
最后,您需要一个处理程序函数来响应信号。在示例中,my_handler 仅打印一条消息并退出程序:
void my_handler(int s){ printf("Caught signal %d\n", s); exit(1); }
完整代码
以下是将 sigaction 用于捕捉 Ctrl-C 事件的完整代码:
#include#include #include #include 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; }
通过使用 sigaction,您可以可靠地捕捉 Ctrl-C 事件并采取适当的措施。
以上是如何使用 Sigaction 函数在 C 中优雅地处理 Ctrl-C 中断?的详细内容。更多信息请关注PHP中文网其他相关文章!