Я написал эту простую программу:обработка 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
Enter текст:
Введите текст:
Введите текст:
Введите текст:
(программа продолжает цикл без ожидания ввода)
Что мне делать?
Можете ли вы описать то, что вы пытаетесь достичь? Обычно для простой программы легче дать сигналам ожидаемый эффект, т. Е. Для SIGINT, завершить программу. Кроме того, в зависимости от вашей системы может быть безопасно использовать высокий уровень io (например, std :: cout) из обработчика сигналов. –
Я пытаюсь написать небольшую программу оболочки. это просто пример, который поможет мне описать мою проблему. – ThP