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

C Discussion :

Equivalent C au set_terminate de C++


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut Equivalent C au set_terminate de C++
    Bonjour à toutes et à tous,

    Je code un programme sur linux qui est sensé tourner constamment, mais j'aimerais quand même faire un peu le ménage si il est quitté par un CTRL-C ou kill.

    Du coup j'ai pensé à set_terminate, mais je vois qu'il n'existe pas en C.Y-a-t'il un moyen équivalent ?

    De plus, cette partie de code va-t-elle bien s'exécuter si on kill le logiciel ou si on CTRL-C ?

    Merci d'avance pour votre aide !!!

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je ne crois pas qu'il y ait grand-chose en C standard, mais sous POSIX*, tu as la gestion de signaux. Elle peut faire du nettoyage en cas de Ctrl+C (SIGINT, SIGTERM et cie), mais pas en cas de kill: RIEN ne peut faire QUOI QUE CE SOIT en cas de kill.

    *Je sais qu'il y a un peu de gestion de signaux aussi en standard, mais je ne sais jamais quels signaux elle "connait". Je sais en tout cas que c'est beaucoup moins que POSIX.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé Avatar de mikhailo
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 78
    Par défaut
    Je viens de voir qu'il y avait la librairie <signal.h> en C standard, et on peut gérer les différents signaux.

    Il y a une explication ici, par ex: http://www.xgc.com/manuals/xgclib/c1632.html

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tiens, tous les signaux qui ici nous intéressent sont ANSI. Je n'aurais pas cru...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 480
    Par défaut
    Citation Envoyé par PoZZyX Voir le message
    Bonjour à toutes et à tous,

    Je code un programme sur linux qui est sensé tourner constamment, mais j'aimerais quand même faire un peu le ménage si il est quitté par un CTRL-C ou kill.

    Du coup j'ai pensé à set_terminate, mais je vois qu'il n'existe pas en C.Y-a-t'il un moyen équivalent ?
    C'est normal car c'est une opération qui dépend du système sur lequel tu tournes et pas du langage à proprement parler (ce n'est pas la libC qui gère Ctrl-C). Il faut que tu fasse un gestionnaire de signal pour intercepter les signaux qui t'intéressent. Attention à choisir les bons. Voir pour cela man signal, man sigaction et man 7 signal.

    Tu peux regarder cette discussion également.

    Citation Envoyé par Médinoc Voir le message
    Tiens, tous les signaux qui ici nous intéressent sont ANSI. Je n'aurais pas cru...
    Ça m'a surpris aussi, la première fois…

  6. #6
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Merci pour toutes ces réponses. Je me pose une autre question maintenant. Un programme qui tourne constamment (toujours sur linux), comment le terminer sans le killer (lui dire de se terminer et que je puisse récupérer le message afin de faire un peu de nettoyage).

    Merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/11/2002, 09h12
  2. equivalent à explode?
    Par djridou dans le forum Langage
    Réponses: 3
    Dernier message: 28/08/2002, 11h01
  3. [Kylix] Equivalent ShellExec en CLX
    Par Anonymous dans le forum EDI
    Réponses: 7
    Dernier message: 14/08/2002, 11h55
  4. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 21h07
  5. [Kylix] equivalent winsock avec kylix
    Par Victor dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 07h43

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