【发布时间】:2009-11-21 11:22:50
【问题描述】:
我写了这个简单的程序:
void sig_ha(int signum)
{
cout<<"received SIGINT\n";
}
int main()
{
string name;
struct sigaction newact, old;
newact.sa_handler = sig_ha;
sigemptyset(&newact.sa_mask);
newact.sa_flags = 0;
sigaction(SIGINT,&newact,&old);
for (int i=0;i<5;i++)
{
cout<<"Enter text: ";
getline(cin,name);
if (name!="")
cout<<"Text entered: "<<name;
cout<<endl;
}
return 0;
}
如果我在程序等待输入时按 Ctrl+C,我会得到以下输出:
输入文本:收到 SIGINT
输入文字:
输入文字:
输入文字:
输入文字:
(程序继续循环,不等待输入)
我该怎么办?
【问题讨论】:
-
你能准确描述你想要达到的目标吗?通常对于一个简单的程序,让信号具有预期的效果更容易,即对于 SIGINT,终止程序。此外,根据您的系统,使用信号处理程序中的高级 io(例如 std::cout)可能不安全。
-
我正在尝试编写一个小型 shell 程序。这只是帮助我描述我的问题的一个例子。