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
Bonjour,
comme vous pouvez le savoir déjà, sous Linux, les signaux corréspondeent à des interruptions logicielles. donc pourrais-vous stp nous aider à trouver ce qui suit :
- le signal (nom & numéro) qui traite l'exception d'une division par zéro ?
- élaborer un prg en C qui déroute l'interruption : erreur de calcul en virgule flottante (Div par zéro)
- élaborer et exécuter un script qui affiche la liste des signaux disponibles et qui lance notre prg executable.

aussi pourrez vous nous donner quelques définitions claires et nettes sur les processus et interruptions ! ( le minimum à savoir)

Ps : Merci d'avance, saches que si on réussira notre Tp, ça sera bien grâce à vous !!
Je vous remercie d'avance !
A voir également:

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
Le programme écrit proprement ressemble plutôt à ça :
#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
1
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
Tu peux commencer par regarder ici :

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
0
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
Merci mamiemando je vais jetter un oeil sur ce site, qui me semble d'ailleurs être en anglais, et moi j'suis blue english...
0
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
Lis le man ça devrait suffire
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/sigaction.2.html
man sigaction

Bonne chance
0

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
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
0
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
Merci comme même ^^
0
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
Je te remercie pour ta réponse mamiemando c'est gentil, bonne continuation pour toi ;)
0
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
De même !
0
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
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...
0
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
Je n'ai pas compris
0
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
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 !
0
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
Ahah non désolée ça fait partie de l'exercice :-)
0
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
mais le changement est mimim xD, merci comme même ...
Une simple question : Quel est le type de sa_handler ? merci d'avance...
0
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
man sigaction !!!!!
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/sigaction.2.html
0