c++ 捕获ctrl+c
时间: 2023-09-09 22:08:10 浏览: 109
在 C++ 中,可以使用 signal 函数来捕获 Ctrl+C 信号,具体代码如下:
```c++
#include <iostream>
#include <csignal>
void signalHandler(int signum) {
std::cout << "Caught signal " << signum << std::endl;
exit(signum);
}
int main() {
signal(SIGINT, signalHandler);
while (true) {};
return 0;
}
```
在上面的代码中,我们定义了一个 signalHandler 函数来处理 Ctrl+C 信号,当信号发生时,该函数会输出一条信息并退出程序。在 main 函数中,我们使用 signal 函数来注册 signalHandler 函数,以便在收到 Ctrl+C 信号时调用该函数。
相关问题
C++语言程序捕获Ctrl+C 信号
可以使用signal函数注册一个处理器来响应SIGINT信号,也就是Ctrl+C信号。在处理器中可以写入对应的程序代码,用于捕获和处理信号。下面是一个示例代码:
```
#include <signal.h>
#include <stdio.h>
void signal_handler(int signum) {
printf("You pressed Ctrl-C! \n");
}
int main() {
signal(SIGINT, signal_handler);
while(1) {
// 此处可以写一些长时间运行的代码
}
return 0;
}
```
如何让一个程序Ctrl c时执行析构,释放资源
可以使用 signal 函数来捕获 Ctrl+C 信号,然后在信号处理函数中执行析构函数和释放资源的操作。具体实现可以参考以下代码:
```c++
#include <iostream>
#include <csignal>
class Resource {
public:
Resource() {
std::cout << "Resource created" << std::endl;
}
~Resource() {
std::cout << "Resource destroyed" << std::endl;
}
};
Resource* res = nullptr;
void signalHandler(int signum) {
if (res != nullptr) {
delete res;
res = nullptr;
}
exit(signum);
}
int main() {
res = new Resource();
signal(SIGINT, signalHandler);
while (true) {
// do something
}
return 0;
}
```
在上面的代码中,我们定义了一个 Resource 类来模拟需要释放的资源。在 main 函数中,我们创建了一个 Resource 对象,并使用 signal 函数来捕获 Ctrl+C 信号。当捕获到信号时,会调用 signalHandler 函数,在该函数中执行析构函数和释放资源的操作。最后,我们在主函数中使用一个无限循环来模拟程序的运行。