IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Traitement d'un signal, comportement anormal sous SunOS


Sujet :

C++

  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut 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 )

    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.

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    J'ai le meme comportement avec Solaris 10 qu'avec Linux.

    Note que je n'utiliserais certainement pas des fonctions de la bibliotheque standard dans des signaux, il y a trop de risque que ca marche dans des cas simple comme ici mais plus en situation reelle. Si je voulais faire des IO, j'attaquerais directement l'interface Unix en verifiant que ce que j'utilise est bien "Async-Signal-Safe" (c'est dans le bouquin de Stevens mais les man page de Sun le precise et si j'ai bonne memoire POSIX le definit egalement).

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    J'ai le meme comportement avec Solaris 10 qu'avec Linux.

    Note que je n'utiliserais certainement pas des fonctions de la bibliotheque standard dans des signaux, il y a trop de risque que ca marche dans des cas simple comme ici mais plus en situation reelle. Si je voulais faire des IO, j'attaquerais directement l'interface Unix en verifiant que ce que j'utilise est bien "Async-Signal-Safe" (c'est dans le bouquin de Stevens mais les man page de Sun le precise et si j'ai bonne memoire POSIX le definit egalement).
    C'est un programme qui ne vient pas de moi.
    Je ne suis pas bon dans la prog. système.

    Bon donc si ça marche chez toi avec Solaris 10, c'est qu'on doit avoir un problème dans l'installation du système.

    Merci bien. Je transmets la recommandation à ceux qui sont sur ce projet.

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    J'avais testé sur Sparc, je ne sais plus avec quel(s) compilateur(s). Je viens de retester sur x86 et ca passe avec sun CC mais j'ai le comportement que tu décris avec g++ 3.4.3 (j'en ai pas d'autre sur cette machine). J'ai pas le temps d'investiguer cela.

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    J'avais testé sur Sparc, je ne sais plus avec quel(s) compilateur(s). Je viens de retester sur x86 et ca passe avec sun CC mais j'ai le comportement que tu décris avec g++ 3.4.3 (j'en ai pas d'autre sur cette machine). J'ai pas le temps d'investiguer cela.
    humm intéressant ce que tu dis... Nous avons d'installer le 3.4.5 par défaut. Mais le problème est le même avec le 4.xx

    Cependant je crois qu'ils n'ont pas essayé CC.

    Merci

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Marche pas sous Solaris 9 (ou 8, enfin, le 5.9)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    [millie@vierge:~]$ g++ --version
    g++ (GCC) 3.4.6
    [millie@vierge:~]$ uname -a
    SunOS vierge 5.9 Generic_118558-08 sun4u sparc SUNW,Ultra-4
    [millie@vierge:~]$ ./a.out
    ^CAppuyez sur q pour quitter
    Appuyez sur q pour quitter
    Appuyez sur q pour quitter
    Appuyez sur q pour quitter
    Appuyez sur q pour quitter
    Appuyez sur q pour quitter
    Appuyez sur q pour quitter
    Appuyez sur q pour quitter
    Et marche pas aussi sous le 10


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [millie@tanit:~]$ rsh reglisse
    Last login: Thu May 10 10:07:52 on console
    Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
    [millie@reglisse:~]$ uname -a
    SunOS reglisse 5.10 Generic_118833-36 sun4u sparc SUNW,A70
    [millie@reglisse:~]$ g++ --version
    g++ (GCC) 3.4.6

    Mais marche sous linux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [millie@reglisse:~]$ rsh dot
    Kickstart-installed Fedora core1  Wed May 12 17:27:57 CEST 2004
    [millie@dot:~]$ g++ test.c
    [millie@dot:~]$ ./a.out
    Appuyez sur q pour quitter
    Dans la fonction de traitement des signaux: 2
    Dans la fonction de traitement des signaux: 2
    q
    [millie@dot:~]$ g++ --version
    g++ (GCC) 3.3.2 20031022 (Red Hat Linux 3.3.2-1)

  7. #7
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    En fait, je crois avoir déjà eu un problème similaire...
    Et l'expert Solaris m'a dit que c'était dû à un problème de tampon non vidé qui se faisait différement...

    Je vais essayer de te retrouver ça


    EDIT : Bon, en fait, ça devait pas être ça, mais faut avouer que je comprend plus rien au code que j'avais fait

Discussions similaires

  1. Comportement anormal de slideDown() sous Firefox
    Par hardShield dans le forum jQuery
    Réponses: 4
    Dernier message: 17/04/2013, 00h30
  2. [9i] Comportement des sous-partitions par Hash
    Par saysay dans le forum Administration
    Réponses: 6
    Dernier message: 06/08/2008, 16h44
  3. Réponses: 9
    Dernier message: 23/11/2006, 20h52
  4. CASE WHEN avec un comportement anormal
    Par damien.sans dans le forum Oracle
    Réponses: 5
    Dernier message: 23/08/2006, 10h03
  5. Comportement anormal de la tabulation sur une DBGrid
    Par fredfred dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/05/2005, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo