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 )

Nous avons essayé le programme suivant sous Linux Debian (gcc 4), Mac (gcc 4), SunOS (gcc 4 et gcc 3).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.