を通して私はstd::getline()
経由stdin
からユーザー入力を読んで、私はSIGINTでプログラムを終了することができるようにしたいです。残念ながら、std::getline()
はどの信号でも目を覚まさないようです。したがって、以下のコードは、CTRL-C と RETURNを押した後アボート。ウェイクアップのstd :: getlineの信号
#include <csignal>
#include <string>
#include <iostream>
bool abort_ = false;
void SigIntHandler(int signum) {
std::cout << "Received SIGINT" << std::endl;
abort_ = true;
}
int main(int argc, char *argv[]) {
signal(SIGINT, SigIntHandler);
while (!abort_) {
std::string line;
std::cout << "> ";
std::getline(std::cin, line);
if (!std::cin)
std::cin.clear();
std::cout << line << std::endl;
}
}
なぜそうですか?ユーザー入力以外でstd::getline()
を起動する機会はありますか?あるいは、信号にも反応するstdin
から読み取る他の方法がありますか?プロセスは、信号を受信した場合
基本的な点には影響しませんが、C++ 11ではシグナルハンドラと同期できる関数std :: atomic_signal_fenceが追加されました。 –