【发布时间】:2017-09-29 12:13:51
【问题描述】:
我通过std::getline() 读取来自stdin 的用户输入,并且我希望能够通过SIGINT 退出程序。不幸的是,std::getline() 似乎没有被任何信号唤醒。因此,下面的代码仅在按下 CTRL-C 和 RETURN 后中止。
#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,也可以响应信号?
【问题讨论】: