Forum Programmation.c Traitement du signal

Posté par  .
Étiquettes : aucune
5
4
oct.
2008
Salut à tous !!

Je m'intéresse au traitement du signal et je me demandais si il était possible de donner à un signal l'utilisation d'une procédure, sous la forme :

void maProcedure(void)


car un
signal(SIGINT, maProcedure)
me donne comme erreur passing argument 2 of ‘signal’ from incompatible pointer type, ce qui est normal.

Pourtant, je pense qu'il est possible d'affecter à un signal autre chose qu'un void action(int) ?

Merci pour votre aide :)
  • # Traitement du signal

    Posté par  . Évalué à 6.

    C'est la période des journaux incompréhensibles ou c'est moi ?

    Ce que j'appelle "Traitement du signal" n'a pas grand chose à voir avec ce dont tu parles et, au passage, on dirait que ça n'a ni queue ni tête.

    Des éclaircissements peut-être ?
    • [^] # Re: Traitement du signal

      Posté par  . Évalué à 3.

      C'est plutôt que je me suis trompé.
      AU lieu d'un msg sur le forum, j'ai fait un journal :(
      • [^] # Re: Traitement du signal

        Posté par  . Évalué à 3.

        ça ne rend pas le journal plus clair...

        le "traitement du signal" est un domaine à cheval entre la physique, l'électronique et l'informatique ( http://fr.wikipedia.org/wiki/Traitement_du_signal ).

        Alors que là tu sembles nous parler des signal/slot de Qt....
        • [^] # Re: Traitement du signal

          Posté par  . Évalué à 2.

          Il parle des signaux Unix, un système rudimentaire d'IPC.

          Pour ta question, je ne pense pas. Le mieux à faire étant de créer une fonction du genre :

          void monGestionaireDeSignal_Wrapper(int)
          {
          monGestionnaireDeSignal();
          }

          et d'utiliser celle-ci.

          Sinon, tu peux caster. Mais c'est très moche.

          typedef void (*voidFPtr)(void);
          signal(SIGINT, (voidFPtr)maProcedure);
      • [^] # Re: Traitement du signal

        Posté par  . Évalué à 3.

        Il aurait fallu écrire traitement des signaux unix plutôt que traitement du signal qui n'a rien à voir.

        Sinon, un simple 'man signal' pourra probablement t'éclairer.
  • # signal est déprécié

    Posté par  . Évalué à 4.

    Pourquoi a tu absolument besoin que ta fonction prenne rien ?

    Et pourquoi utilise tu encore signal() qui est déprécié ? utilise sigaction() à la place ...
    Ça résout sans doute pas ton problème ...

    struct sigaction tonsig = { .sa_handler = taProcedure, .flags = 0 };
    if (sigaction(SIGINT, &tonsig) < 0) au_secours();

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.