Signaux en c

Discutez d'informatique ici !
Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

Signaux en c

par Rockleader » 18 Nov 2014, 01:16

Hello, j'ai voulu essayé de faire un programme en C sur mon pc, le but était d'empêcher un certain nombre de fois que le programme ne se ferme avec un Ctrl C.


j'ai donc réalisé ceci à l'aide de mes cours et de la doc sur internet. Cela marche sans problème.

Code: Tout sélectionner
#include
#include
#include

int i=0;


void traitementSignal(int s)
{

    if(i!=5)
    {
        i++;
        signal(2,&traitementSignal);
        printf("Signal %d reçu\n",i);
    }

}
int main()
{
   signal(2,&traitementSignal);
   while(1);

   return 0;
}



Toutefois j'ai lu qu'il ne fallait pas utiliser signal() mais plutôt sigaction. Quelqu’un pourrait il m'en donner la raison ?



J'ai voulu toutefois essayé, malheureusement windows ne semble pas connaître la structure et je ne peux pas tester mon code dans l'immédiat.


le main devient

Code: Tout sélectionner
int main()
{

    struct sigaction s;
    s.sa_handler=traitementSignal;
    sigemptyset(&s.sa_mask);
    s.sa_flags=0;
    sigaction(2,&s,NULL);
    while(1);

    return 0;
}


Pouvez vous me dire si cela est correct ?

Je pourrais tester bien entendu, mais pas avant jeudi et j'aurais apprécié avoir la réponse avant^^



*Maudit soit la batterie de mon linux qui m'a lâché :cry: *
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !



Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 07:03

par ampholyte » 18 Nov 2014, 17:10

Bonjour,

Concernant ta première question, je te renvoie vers : http://stackoverflow.com/questions/231912/what-is-the-difference-between-sigaction-and-signal

Ensuite cela est correct mais du coup dans ton traitementSignal tu utilises signal ^^

Ensuite c'est bien beau de checker le signal mais il faudrait pouvoir également rendre la main.

Une fois que l'on a fait 5 ctrl + c il faudrait faire un exit(0) si i > 5 pour fermer le programme.

(Test sous unix).

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 18 Nov 2014, 17:59

ampholyte a écrit:Bonjour,

Concernant ta première question, je te renvoie vers : http://stackoverflow.com/questions/231912/what-is-the-difference-between-sigaction-and-signal

Ensuite cela est correct mais du coup dans ton traitementSignal tu utilises signal ^^

Ensuite c'est bien beau de checker le signal mais il faudrait pouvoir également rendre la main.

Une fois que l'on a fait 5 ctrl + c il faudrait faire un exit(0) si i > 5 pour fermer le programme.

(Test sous unix).



Merci beaucoup !!!!

Ouai le exit c'est vrai que j'ai pas fais gaffe è_é

Et j'avais oublié que j'avais un signal dans la fonction è_é du coup je vais devoir en écrire une autre propre pour cette version :)
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite