J'ai écrit ce programme simple:manutention SIGINT et 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;
}
Si je frappe ctrl-c tandis que le programme attend l'entrée que je reçois la sortie suivante:
Entrer le texte: reçu SIGINT
Entrez texte:
Entrez le texte:
Saisir le texte:
Entrez le texte:
(la le programme continue la boucle sans attendre la saisie)
Que dois-je faire?
Pouvez-vous décrire exactement ce que vous essayez d'atteindre? Habituellement, pour un programme simple, il est plus facile de laisser les signaux avoir l'effet escompté, c'est-à-dire pour SIGINT, de terminer le programme. En outre, en fonction de votre système, il peut ne pas être prudent d'utiliser un io de haut niveau (tel que std :: cout) à partir d'un gestionnaire de signal. –
J'essaie d'écrire un petit programme shell. ceci est juste un exemple pour m'aider à décrire mon problème. – ThP