Interruption sous linux en C
Résolu/Fermé
Chabanus
-
18 janv. 2008 à 12:27
mamiemando Messages postés 33346 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 novembre 2024 - 26 janv. 2008 à 04:41
mamiemando Messages postés 33346 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 novembre 2024 - 26 janv. 2008 à 04:41
A voir également:
- Interruption sous linux en C
- Linux mint 32 bits - Télécharger - Systèmes d'exploitation
- Diskinternals linux reader - Télécharger - Stockage
- Linux live usb creator - Télécharger - Outils Internet
- Quel linux choisir - Guide
- Backtrack linux - Télécharger - Sécurité
14 réponses
mamiemando
Messages postés
33346
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 novembre 2024
7 803
20 janv. 2008 à 15:24
20 janv. 2008 à 15:24
Le programme écrit proprement ressemble plutôt à ça :
Grosso modo tu prépares un handler qui va rattraper une exception (ici une division par 0). Ensuite en calculant c tu déclenche cette division par 0. Le handler rattrape l'exception, puis quitte le programme en retournant le code d'exécution EXIT_FAILURE.
Si tu as eu l'occasion de faire du java ou du c++ les blocs try{ }catch(...){ } c'est un peu la même idée.
Bonne chance
#include <signal.h> #include <stdio.h> #include <stdlib.h> void derouter_interuption(int signum){ printf("il y a eu une exception (signum = %d) !!!!! oups oups ^^ \n",signum); exit(EXIT_FAILURE); } int main(){ struct sigaction nouvelle_action; int a=1, b=0,c; nouvelle_action.sa_handler = derouter_interuption; sigemptyset(&nouvelle_action.sa_mask); sigaction(SIGFPE, &nouvelle_action, NULL); c = a/b; return EXIT_SUCCESS; }
Grosso modo tu prépares un handler qui va rattraper une exception (ici une division par 0). Ensuite en calculant c tu déclenche cette division par 0. Le handler rattrape l'exception, puis quitte le programme en retournant le code d'exécution EXIT_FAILURE.
(mando@cenedra) (~) $ gcc -W -Wall plop.c (mando@cenedra) (~) $ ./a.out il y a eu une exception (signum = 8) !!!!! oups oups ^^
Si tu as eu l'occasion de faire du java ou du c++ les blocs try{ }catch(...){ } c'est un peu la même idée.
Bonne chance
mamiemando
Messages postés
33346
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 novembre 2024
7 803
18 janv. 2008 à 12:57
18 janv. 2008 à 12:57
Tu peux commencer par regarder ici :
https://publications.gbdirect.co.uk//c_book/chapter9/signal_handling.html
Avec la doc tu devrais t'en sortir. Ensuite, il suffit juste de chercher quelques exemples, et ça devrait rouler !
Bonne chance
https://publications.gbdirect.co.uk//c_book/chapter9/signal_handling.html
man sigaction
Avec la doc tu devrais t'en sortir. Ensuite, il suffit juste de chercher quelques exemples, et ça devrait rouler !
Bonne chance
Chabanus
Messages postés
978
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2011
70
18 janv. 2008 à 13:16
18 janv. 2008 à 13:16
Merci mamiemando je vais jetter un oeil sur ce site, qui me semble d'ailleurs être en anglais, et moi j'suis blue english...
mamiemando
Messages postés
33346
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 novembre 2024
7 803
18 janv. 2008 à 14:19
18 janv. 2008 à 14:19
Lis le man ça devrait suffire
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/sigaction.2.html
Bonne chance
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/sigaction.2.html
man sigaction
Bonne chance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Chabanus
Messages postés
978
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2011
70
18 janv. 2008 à 17:43
18 janv. 2008 à 17:43
Merci de m'aider mamiemando c'est sympa !
Un camarade a moi a fait cela, et j'aimerai qu'on m'explique le programme si c'est possible.
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void derouter_interuption(int signum)
{
printf("il y a u une exeption!!!!! oups oups ^^ \n");
exit(EXIT_FAILURE);
}
int main(void)
{
struct sigaction nouvelle_action;
nouvelle_action.sa_handler = derouter_interuption;
sigemptyset(&nouvelle_action.sa_mask);
sigaction(SIGFPE, &nouvelle_action, NULL);
int a=1, b=0;
int c = a/b;
return EXIT_SUCCESS;
}
Je vous remercie d'avance
Un camarade a moi a fait cela, et j'aimerai qu'on m'explique le programme si c'est possible.
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void derouter_interuption(int signum)
{
printf("il y a u une exeption!!!!! oups oups ^^ \n");
exit(EXIT_FAILURE);
}
int main(void)
{
struct sigaction nouvelle_action;
nouvelle_action.sa_handler = derouter_interuption;
sigemptyset(&nouvelle_action.sa_mask);
sigaction(SIGFPE, &nouvelle_action, NULL);
int a=1, b=0;
int c = a/b;
return EXIT_SUCCESS;
}
Je vous remercie d'avance
Chabanus
Messages postés
978
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2011
70
18 janv. 2008 à 20:04
18 janv. 2008 à 20:04
Merci comme même ^^
Chabanus
Messages postés
978
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2011
70
24 janv. 2008 à 13:11
24 janv. 2008 à 13:11
Je te remercie pour ta réponse mamiemando c'est gentil, bonne continuation pour toi ;)
mamiemando
Messages postés
33346
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 novembre 2024
7 803
24 janv. 2008 à 17:21
24 janv. 2008 à 17:21
De même !
Chabanus
Messages postés
978
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2011
70
25 janv. 2008 à 13:20
25 janv. 2008 à 13:20
SaLUT...
Une derniere requête si possible...Je souhaite changer l'apparence du programme tout en ayant le même resultat lors de l'execution...Je vous remercie d'avance...
Une derniere requête si possible...Je souhaite changer l'apparence du programme tout en ayant le même resultat lors de l'execution...Je vous remercie d'avance...
mamiemando
Messages postés
33346
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 novembre 2024
7 803
25 janv. 2008 à 14:27
25 janv. 2008 à 14:27
Je n'ai pas compris
Chabanus
Messages postés
978
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2011
70
25 janv. 2008 à 15:59
25 janv. 2008 à 15:59
Modifier le programme, à titre d'exemple: Changer les variables prédéfinies, modifier l'emplacement des fonctions...En résumé j'aimerai changer le programme de manière à ce que l'ancien ne ressemble plus au nouveau, tout en gardant bien sur le même résultat a l'exécution...Merci !
mamiemando
Messages postés
33346
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 novembre 2024
7 803
25 janv. 2008 à 19:21
25 janv. 2008 à 19:21
Ahah non désolée ça fait partie de l'exercice :-)
Chabanus
Messages postés
978
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2011
70
25 janv. 2008 à 22:20
25 janv. 2008 à 22:20
mais le changement est mimim xD, merci comme même ...
Une simple question : Quel est le type de sa_handler ? merci d'avance...
Une simple question : Quel est le type de sa_handler ? merci d'avance...
mamiemando
Messages postés
33346
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 novembre 2024
7 803
26 janv. 2008 à 04:41
26 janv. 2008 à 04:41
man sigaction !!!!!
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/sigaction.2.html
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/sigaction.2.html