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

Réseau Discussion :

un programme sur les signaux


Sujet :

Réseau

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Par défaut un programme sur les signaux
    Salut
    D'aprés ce que j'ai compris sur le signaux, qu'on peut pas empêcher le Ctrl C c'est à dire le fait de tuer un processus.
    et bon voilà un exercice qui contre dit cette hypothèse.
    il s'agit d'un programme qui affiche continuellement BONJOUR.Ce programme doit intercepter le signal Ctrl C et n’accepte de le tuer que si l'utilisateur entre le mot de passe correct.

    signal Ctrl C=> SIGKILL => signal n°9

    voici mon essai qui surement faux, je convaincue par mon hypothèse:
    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
     
    #include<stdio.h>
    #include<signal.h>
    #include<unistd.h>
    void sighandler(int signum)
    {
         char password[5];
         printf("Mot de passe:")
         scanf("%s",mp);
         if(mp=="xyz")//si le mot de passe est correcte
            kill((int)getpid,9);
    }
    int main()
    {
      signal(SIGKILL,&sighandler);//  si le signal n°9  arrive donc executer sighandler
     
      while(1)
        {
           printf("Bonjour \n")
           sleep(10);
         }
    return 0;
    }
    alors que donne ce prgramme:
    en l'executant, il m'affiche même pas "Bonjour"

    quelque peut m'aider à débugger cette situation

    merci à l'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Recherche du travail
    Inscrit en
    Août 2004
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Recherche du travail

    Informations forums :
    Inscription : Août 2004
    Messages : 561
    Par défaut
    signal Ctrl C=> SIGKILL => signal n°9
    Faux, c'est un SIGINT (n°2).

    D'aprés ce que j'ai compris sur le signaux, qu'on peut pas empêcher le Ctrl C c'est à dire le fait de tuer un processus.
    Encore faux. Le Sigint demande gentillement de s'interrompre. Donc tu peux le capté.

    Alors que le SIGKILL tue de sang froid (mouhaha ). Tu ne peut pas le capter

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Par défaut
    FAUX
    je vous assure que vous m'avez sauvé
    alors je ré-programmer de nouveau , mais le prgramma ne m'affiche même pas "Bonjour" même avant d'envoyer le signal SIGKILL, hmmm
    et puis j'ai fait une erreur au niveau de la comparaison de mot de passe, j'ai du urtuliser une fonction de comparaison

    merci encore pour réponse

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Par défaut
    en tenant compte de ce que vous avez dit:
    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
     
    #include<stdio.h>
    #include<signal.h>
    #include<unistd.h>
    #include<string.h>
    void sighandler(int signum)
    {
         char password[5];
         char pw[]="xyz";
         printf("Mot de passe:")
         scanf("%s",password);
         if(strcmp(password,pw)==0)//si le mot de passe est correcte
            kill((int)getpid,9);
    }
    int main()
    {
      signal(2,&sighandler);//  si le signal n°2  arrive donc executer sighandler
     
      while(1)
        {
           printf("Bonjour \n")
           sleep(10);
         }
    return 0;
    }
    malgré tous ces changement, il m'affiche même pas bonjour

  5. #5
    Membre émérite
    Homme Profil pro
    Recherche du travail
    Inscrit en
    Août 2004
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Recherche du travail

    Informations forums :
    Inscription : Août 2004
    Messages : 561
    Par défaut
    Exemple (Ignorance des interruptions clavier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include<stdio.h>
    #include<signal.h>
    void hand()
    { printf("Envoyer le signal SIGKILL pour me tuer\n");}
    main()
    {
    signal(SIGINT,hand);
    signal(SIGQUIT,hand);
    for(;;);
    }
    Ton code corrigé :
    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
    #include<stdio.h>
    #include<signal.h>
    #include<unistd.h>
    #include<string.h>
     
    void hand()
    {
            char password[5];
            char pw[]="xyz";
            printf("Mot de passe:");
            scanf("%s",password);
     
            if(!strcmp(password,pw))//si le mot de passe est correcte
                    kill((int)getpid(),9);
    }
     
    main()
    {
            signal(SIGINT,hand);
            signal(SIGQUIT,hand);
     
            printf("Bonjour \n");
     
            for(;;);
    }

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/11/2013, 20h40
  2. programmation avec les signaux sur le noyau linux
    Par kallelomar dans le forum Linux
    Réponses: 4
    Dernier message: 06/07/2012, 15h43
  3. faut programme sur les matrices
    Par alouha dans le forum Langage
    Réponses: 1
    Dernier message: 29/04/2008, 09h44
  4. Réponses: 9
    Dernier message: 15/10/2006, 20h37
  5. Réponses: 2
    Dernier message: 29/07/2005, 10h14

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