Ctrlこのプログラムは、 +経由で SIGINT を送信した後、無限の "Enter a:" をコマンド ラインに出力しCます。このループを終了するには、Ctrl+を使用します\。を含む行のコメントを外すとstd::cin.clear();
、すべて正常に動作します。私の質問は、これは正しい方法ですか?std::cin.clear();
プログラムを待機させたいすべての cin/cout の前に設定する必要があります。そのため、私には適切な方法ではないようです。
#include<iostream>
#include<signal.h>
void sig_handler(int s)
{
std::cout << "Cought: " << s << std::endl;
// do something...
}
int main ()
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = sig_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGINT, &sigIntHandler, NULL);
int a=1;
while(a)
{
std::cout << "Enter a:" << std::endl;
//std::cin.clear(); // Uncomment me!
std::cin >> a;
}
}
PS: シグナル ハンドラで cout を使用するのはよくない考えです。
PPS:std::cin.clear();
古い (非推奨) を使用すると、すべて正常に (なしで) 動作しsignal()
ます。
PPPS: 明確にするために、Ctrl+でプログラムを終了したくありませんC!