IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POSIX C Discussion :

Passer des parametres aux handler de signaux


Sujet :

POSIX C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Par défaut Passer des parametres aux handler de signaux
    Hello,

    J'aimerai utiliser des variables (exemple, fclose sur un FILE*, incrémentation, affichage) dans une fonction handler levée par signal. Mais comment acceder aux variables du programme ? j ne vais quand même pas tout déclarer en global comme je le vois dans les tutos ?!

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    fclose n'est pas garantie réentrante, tu n'as donc pas le droit de l'utiliser dans ton handler.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par TheDrev Voir le message
    Hello,

    J'aimerai utiliser des variables (exemple, fclose sur un FILE*, incrémentation, affichage) dans une fonction handler levée par signal. Mais comment acceder aux variables du programme ? j ne vais quand même pas tout déclarer en global comme je le vois dans les tutos ?!
    tu ne demandes pas pourquoi les tutos font ça ??

    C'était un manque à la conception de la fonction, de ne pas avoir de paramètre void* comme paramètre de passage.

    Le seul autre moyen est d'utiliser sigaction, qui a une structure.

  4. #4
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Par défaut
    ou une structure static

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Un handler de signal doit en faire le moins possible. C'est à dire que, AU PLUS, il doit changer l'état d'une varaible de type "raisonnablement simple" (short, int long, bool, ..., mais certainement pas une chaine de caractères).

    Donc la solution est que ton handler change une variable, et qu'ensuite, selon la valeur de ladite variable, tu appelles ou non la fonction qui fera le traitement que tu souhaites.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Bonjour,

    Un handler de signal doit en faire le moins possible. C'est à dire que, AU PLUS, il doit changer l'état d'une varaible de type "raisonnablement simple" (short, int long, bool, ..., mais certainement pas une chaine de caractères).
    et c'est déjà trop :
    If the signal occurs other than as the result of calling the abort or raise function, the
    behavior is undefined if the signal handler refers to any object with static storage duration
    other than by assigning a value to an object declared as volatile sig_atomic_t, or
    the signal handler calls any function in the standard library other than the abort
    function, the _Exit function, or the signal function with the first argument equal to
    the signal number corresponding to the signal that caused the invocation of the handler.
    Furthermore, if such a call to the signal function results in a SIG_ERR return, the
    value of errno is indeterminate.

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    oui, faut pas charrier quand même

    Une utilisation intensive des signaux et signaux handlers prouvent (encore une fois ) qu'entre la théorie et la pratique il y a un monde....

    Si ce que tu cites était le cas, les signaux n'auraient aucun intérêt...

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Un handler de signal doit en faire le moins possible. C'est à dire que, AU PLUS, il doit changer l'état d'une varaible de type "raisonnablement simple" (short, int long, bool, ..., mais certainement pas une chaine de caractères).
    Le seul type autorisé est sig_atomic_t qui, à ma connaissance est un entier...

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/05/2006, 09h30
  2. passer des parametres à l'application
    Par wickramben dans le forum JWS
    Réponses: 2
    Dernier message: 12/04/2006, 19h07
  3. [String] passer des minuscules aux majuscules
    Par Lady_jade dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2005, 10h03
  4. Réponses: 2
    Dernier message: 04/10/2005, 20h54
  5. [script SQL]comment passer des parametres a un scrip sql?
    Par la7su dans le forum Langage SQL
    Réponses: 5
    Dernier message: 23/03/2005, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo