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 ですね。