3
我写了这个简单的程序:SIGINT处理和函数getline
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)可能并不安全。 – 2009-11-21 11:47:46
我正在尝试编写一个小shell程序。这只是一个例子来帮助我描述我的问题。 – ThP 2009-11-21 12:12:06