Précédent   Forum des professionnels en informatique > Systèmes > Linux > Réseau
Réseau Vos questions autour des réseaux et télécoms sous Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/02/2011, 01h07   #1
Membre à l'essai
 
Inscription : décembre 2009
Messages : 128
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 128
Points : 20
Points : 20
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 :
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
hindou90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 06h55   #2
Membre Expert
 
Étudiant
Inscription : août 2004
Messages : 500
Détails du profil
Informations personnelles :
Âge : 22

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2004
Messages : 500
Points : 1 017
Points : 1 017
Envoyer un message via MSN à Senaku-seishin
Citation:
signal Ctrl C=> SIGKILL => signal n°9
Faux, c'est un SIGINT (n°2).

Citation:
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
__________________
Avoir un regard neutre sur notre vie dénuée de sens, c'est la voir tel un ignorant
Senaku-seishin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 09h44   #3
Membre à l'essai
 
Inscription : décembre 2009
Messages : 128
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 128
Points : 20
Points : 20
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
hindou90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 09h57   #4
Membre à l'essai
 
Inscription : décembre 2009
Messages : 128
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 128
Points : 20
Points : 20
en tenant compte de ce que vous avez dit:
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
 
#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
hindou90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 14h26   #5
Membre Expert
 
Étudiant
Inscription : août 2004
Messages : 500
Détails du profil
Informations personnelles :
Âge : 22

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2004
Messages : 500
Points : 1 017
Points : 1 017
Envoyer un message via MSN à Senaku-seishin
Exemple (Ignorance des interruptions clavier)

Code :
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 :
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(;;);
}
__________________
Avoir un regard neutre sur notre vie dénuée de sens, c'est la voir tel un ignorant
Senaku-seishin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h23.


 
 
 
 
Partenaires

Hébergement Web