gpt4 book ai didi

c++ - Linux 中的 Ctrl + C 中断事件处理

转载 作者:IT老高 更新时间:2023-10-28 12:58:45 25 4
gpt4 key购买 nike

我正在开发一个使用 C++ 并使用 Linux GNU C 编译器编译的应用程序。

当用户使用 Ctrl + C 键中断脚本时,我想调用一个函数。

我该怎么办?任何答案将不胜感激。

最佳答案

当您按下 Ctr + C 时,操作系统会发送一个 signal到过程。有很多信号,其中之一是 SIGINT。 SIGINT(“程序中断”)是终止信号之一。

还有更多种类的终止信号,但 SIGINT 的有趣之处在于它可以被您的程序处理(捕获)。 SIGINT 的默认操作是程序终止。也就是说,如果您的程序没有专门处理此信号,则当您按 Ctr + C 时,您的程序将作为默认操作终止。

要更改信号的默认操作,您必须注册要捕获的信号。在 C 程序中注册一个信号(至少在 POSIX 系统下)有两个函数

  1. signal(int signum, sighandler_t handler);
  2. sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); .

这些函数需要标题 signal.h包含在您的 C 代码中。我在下面提供了一个带有注释的 signal 函数的简单示例。

#include <stdio.h>
#include <stdlib.h>
#include <signal.h> // our new library
volatile sig_atomic_t flag = 0;
void my_function(int sig){ // can be called asynchronously
flag = 1; // set flag
}

int main(){
// Register signals
signal(SIGINT, my_function);
// ^ ^
// Which-Signal |-- which user defined function registered
while(1)
if(flag){ // my action when signal set it 1
printf("\n Signal caught!\n");
printf("\n default action it not termination!\n");
flag = 0;
}
return 0;
}

注意:您只能调用 safe/authorized functions在信号处理程序中。例如 avoid calling printf in signal handler .

您可以使用 gcc 编译此代码并从 shell 执行它。代码中有一个无限循环,它将一直运行,直到您通过按 Ctr + C 发送 SIGINT 信号。

关于c++ - Linux 中的 Ctrl + C 中断事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17766550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com