【发布时间】:2018-08-19 18:03:12
【问题描述】:
我知道如何在 C 中使用它(使用 signal.h),但是 <csignal> 库是在 C++ 中提供的,我想知道它是否包含 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 不是吗?
【问题讨论】:
-
sigaction 不是标准 C++ 的一部分,因此能否使用它取决于您的实现
-
无关:
volatile bool可能不够好。更多信息:set flag in signal handler -
描述“但由于某种原因它不起作用。”更详细。它不编译吗?信号没有得到处理?程序会崩溃吗? ...
-
"但它说没有找到" 什么没有找到? 什么说的?