Interruption sous linux en C

Résolu
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. Modérateur
    man sigaction !!!!!
    http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/sigaction.2.html
    1. mais le changement est mimim xD, merci comme même ...
      Une simple question : Quel est le type de sa_handler ? merci d'avance...
      1. 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 !
        1. 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...
          1. Je te remercie pour ta réponse mamiemando c'est gentil, bonne continuation pour toi ;)
            1. Modérateur
              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. 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
                1. Modérateur
                  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
                  1. Merci mamiemando je vais jetter un oeil sur ce site, qui me semble d'ailleurs être en anglais, et moi j'suis blue english...