Partage
  • Partager sur Facebook
  • Partager sur Twitter

[signal.h] comment initialiser le signal?

Anonyme
    20 avril 2006 à 15:46:46

    Bonjour, dans mon livre de C, j'ai ça: <citation nom="Mon livre de C">Deux fonctions permettent d'intéragir avec le mécanisme des signaux : signal permet d'installer une fonction qui sera exécutée sur réception d'un signal ; raise déclenche un signal chez le processus exécutant.</citation> Donc je me suis demandé: comment ça fonctionne? Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      21 avril 2006 à 11:05:49

      Citation : Ze moi

      dans mon livre de C, j'ai ça:

      Citation : Mon livre de C

      Deux fonctions permettent d'intéragir avec le mécanisme des signaux :
      signal permet d'installer une fonction qui sera exécutée sur réception d'un signal ;
      raise déclenche un signal chez le processus exécutant.



      Donc je me suis demandé: comment ça fonctionne?
      Merci d'avance



      C90 : http://www-ccs.ucsd.edu/c/signal.html

      signal() sert à installer une fonction qui sera appelée lors de la réception du signal correspondant. Par exemple, une division par 0 provoque le signal SIGFPE.
      Par défaut un certain traitement est installé (arrêt du programme, en gros), mais on peut en installer un traitement supplémentaire qui peut faire une certaine action avant.

      /* main.c */
      #include <stdio.h>
      #include <signal.h>

      static void on_math_error(int sig)
      {
         printf ("Signal %d (on_math_error)\n", sig);
      }

      int main(void)
      {
         signal(SIGFPE, on_math_error);

         {
            int x = 3;
            int i;
            for (i = 3; i >= -2; i--)
            {
               int y = x / i;

               printf ("y = %d\n", y);
            }
         }

         return 0;
      }


      y = 1
      y = 1
      y = 3
      Signal 8 (on_math_error)

      NOTA : Ca n'empêche pas le système de lancer sa propre routine d'interception de défaut...

      On peut simuler le signal par logiciel par un appel à la fonction raise().

      #include <stdio.h>
      #include <signal.h>

      static void on_math_error(int sig)
      {
         printf ("Signal %d (on_math_error)\n", sig);
      }

      int main(void)
      {
         signal(SIGFPE, on_math_error);

         raise (SIGFPE);

         return 0;
      }


      Signal 8 (on_math_error)

      Attention, il n'y a pas de paramètre utilisateur (normal, un signal est dérivé d'une interruption matérielle). Pour communiquer, on doit utiliser une variable entière globale de type sig_atomic_t.

      #include <stdio.h>
      #include <signal.h>

      static sig_atomic_t sig_count = 0;

      static void on_math_error(int sig)
      {
         printf ("Signal %d (on_math_error)\n", sig);
         sig_count++;
      }

      int main(void)
      {
         signal(SIGFPE, on_math_error);

         raise (SIGFPE);
         printf ("count = %d\n", (int) sig_count);

         return 0;
      }


      Signal 8 (on_math_error)
      count = 1


      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
      Anonyme
        21 avril 2006 à 11:09:28

        Mais qu'est-ce que c'est que ça ?!!!!!!!
        Edit: ha ba c'est mieux mais là c'est ce que j'ai écrit
        Reedit: là c'est bon je vais lire on voit tout
        Donc si je comprend bien tout est prédéfini? Ya pas moyen de faire son propre signal?
        • Partager sur Facebook
        • Partager sur Twitter
          21 avril 2006 à 11:13:24

          Citation : Ze moi

          Ya pas moyen de faire son propre signal?


          C'est théoriquement possible, mais il faut faire attention à ne pas interférer avec les signaux existants (standards), ni ceux de l'implémentation (système). Le langage C ne donne pas d'indication sur d'éventuelles plages de valeurs 'utilisateur', à part que la valeur doit être >= 0.
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
          Anonyme
            21 avril 2006 à 11:18:05

            Oui désolé ^^ les caractères bizarres c'est parce que j'ai fait un copier-coller de PDF... je savais pas que ça pouvait faire ça
            Bon j'ai à peu près compris, mais je repose ma question: on peut pas faire son propre signal qu'on activerai avec raise?
            • Partager sur Facebook
            • Partager sur Twitter

            [signal.h] comment initialiser le signal?

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown