Interruption sous linux en C

Résolu
Chabanus -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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 !
Configuration: Windows XP
Internet Explorer 7.0

14 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
  2. Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   70
     
    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
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   70
     
    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
  6. Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   70
     
    Merci comme même ^^
    0
  7. Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   70
     
    Je te remercie pour ta réponse mamiemando c'est gentil, bonne continuation pour toi ;)
    0
  8. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    De même !
    0
  9. Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   70
     
    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
  10. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Je n'ai pas compris
    0
  11. Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   70
     
    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
  12. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Ahah non désolée ça fait partie de l'exercice :-)
    0
  13. Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   70
     
    mais le changement est mimim xD, merci comme même ...
    Une simple question : Quel est le type de sa_handler ? merci d'avance...
    0
  14. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    man sigaction !!!!!
    http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/sigaction.2.html
    0