我知道如何在C中使用它(带有signal.h),但是C++中提供了<csignal>库,我想知道它是否包含sigaction?我试着运行它,但它显示找不到。我在想我是不是做错了什么?
#include <iostream>
#include <string>
#include <cstdio>
#include <csignal>
namespace {
volatile bool quitok = false;
void handle_break(int a) {
if (a == SIGINT) quitok = true;
}
std::sigaction sigbreak;
sigbreak.sa_handler = &handle_break;
sigbreak.sa_mask = 0;
sigbreak.sa_flags = 0;
if (std::sigaction(SIGINT, &sigbreak, NULL) != 0) std::perror("sigaction");
}
int main () {
std::string line = "";
while (!::quitok) {
std::getline(std::cin, line);
std::cout << line << std::endl;
}
}但由于某些原因,它不起作用。编辑:所谓“不工作”,我的意思是编译器失败,说没有std::sigaction函数或结构。
sigaction是C POSIX,不是吗?
发布于 2018-08-20 02:18:39
sigaction是在POSIX中,而不是在C++标准中,并且它在全局名称空间中。您还需要struct关键字来区分sigaction (结构)和sigaction (函数)。最后,初始化代码需要在函数中--不能将其放在文件范围内。
#include <cstdio>
#include <signal.h>
namespace {
volatile sig_atomic_t quitok = false;
void handle_break(int a) {
if (a == SIGINT) quitok = true;
}
}
int main () {
struct sigaction sigbreak;
sigbreak.sa_handler = &handle_break;
sigemptyset(&sigbreak.sa_mask);
sigbreak.sa_flags = 0;
if (sigaction(SIGINT, &sigbreak, NULL) != 0) std::perror("sigaction");
//...
}https://stackoverflow.com/questions/51920435
复制相似问题