我通過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'。 –