Traitement d'un signal, comportement anormal sous SunOS
Et hop : question numéro deux.
Cette fois-ci le problème ne vient pas de moi (je veux dire que ce n'est pas un de mes problèmes :P)
Nous avons essayé le programme suivant sous Linux Debian (gcc 4), Mac (gcc 4), SunOS (gcc 4 et gcc 3).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <iostream>
#include <signal.h>
using namespace std;
// Fonction de traitement des signaux
void signaux(int noSignal);
int main() {
char car = '\0';
signal(SIGINT, signaux); // ctrl-c
// Attendre que l'usager entre q pour quitter
while (car != 'q' && car != 'Q') {
cout << "Appuyez sur q pour quitter" << endl;
cin >> car;
}
return 0;
}
void signaux(int noSignal) {
cout << "Dans la fonction de traitement des signaux: " << noSignal << endl;
signal(noSignal, signaux);
} |
Le comportement attendu est une pause attendant un 'q' et quand on fait CTRL-C un message qui indique le traitement du signal.
Pas de problème sous Linux et Mac
Code:
1 2 3 4 5 6 7 8
| Archimede > ./a.out
Appuyez sur q pour quitter
^CDans la fonction de traitement des signaux: 2
^CDans la fonction de traitement des signaux: 2
^CDans la fonction de traitement des signaux: 2
^CDans la fonction de traitement des signaux: 2
^CDans la fonction de traitement des signaux: 2
q |
Mais sous SunOS 5.10, ça ne marche pas.
Un premier CTRL-C lance un affichage d'une infinité de « Appuyez sur q pour quitter ». Un deuxième CTRL-C brise cette boucle et affiche le message voulu. Cependant à ce moment, CTRL-C ne fonctionne plus et il n'y a plus de caractère lu.
Est ce que quelqu'un connait une explication ?
Le problème vient-il de la config' des Suns ? Car, a priori, le code devrait y fonctionner. Nous sommes donc un peu dubitatif.
Merci d'avance.