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).
Le comportement attendu est une pause attendant un 'q' et quand on fait CTRL-C un message qui indique le traitement du signal.
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); }
Pas de problème sous Linux et Mac
Mais sous SunOS 5.10, ça ne marche pas.
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
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.
Partager